Live2D

面试题-什么是最左前缀法则?什么时候索引将失效?

 


什么是最左前缀法则?什么时候索引将失效?

如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始, 并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。

索引失效情况:

  • 联合索引失效:即不符合最左前缀法则。注:与我们编写SQL时,条件编写的先后顺序无关

  • 范围查询:联合索引中,出现范围查询(>,<),范围查询右侧的列索引失效。(当范围查询使用>= 或 <= 时,就能走联合索引,所以,在业务允许的情况下,尽可能的使用类似于 >= 或 <= 这类的范围查询,而避免使用 > 或 <)

  • 索引列运算:不要在索引列上进行运算操作,否则索引将失效。

    # 比如:当根据phone字段进行函数运算操作之后,索引失效
    explain select * from tb_user where substring(phone,10,2) = '15';
  • 字符串不加引号:字符串类型字段使用时,不加引号,索引将失效。(如果字符串不加单引号,对于查询结果,没什么影响,但是数 据库存在隐式类型转换,索引将失效。)

  • like模糊查询:如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。

  • or连接条件:用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。(当or连接的条件,左右两侧字段都有索引时,索引才会生效。)

  • 数据分布影响:如果MySQL评估使用索引比全表更慢,则不使用索引。 因为索引是用来索引少量数据的,如果通过索引查询返回大批量的数据,则还不 如走全表扫描来的快,此时索引就会失效。

posted @   都是朕的江山  阅读(277)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
返回顶端
点击右上角即可分享
微信分享提示