索引失效的几种情况

1、 最好全值匹配——索引怎么建我怎么用

分析
三次查询均使用到索引。

2、 最佳左前缀法则——如果索引了多列,要遵守最左前缀法则。指的是查询要从索引的最左前列开始并且不跳过索引中的列。

 

分析:

  • 前提条件: 表中已添加复合索引name,age,pos
  • 第一次执行缺少name,查询条件复合索引最左侧name缺少,违反了最佳左前缀法则,导致索引失效,变为ALL,全表扫描。
  • 同理,第二次查询条件中只有pos,违反了最佳左前缀法则,导致索引失效,变为ALL,全表扫描。
  • 第三次查询中存在name,索引能够被使用到,但是是部分使用。

3、不在索引列上做任何操作(计算,函数,(自动或者手动)类型装换),会导致索引失效而导致全表扫描。——MYSQL自带api函数操作,如:left等


分析:

  • 没有使用函数时,索引被使用到。
  • 当用函数操作加的索引列时,索引将会失效,变成了全表扫描。

4、存储引擎不能使用索引中范围条件右边的列。——范围之后索引失效。(< ,> between and,)

 

分析:

  • 执行查询一时,索引全部使用到。
  • 执行查询二时,索引使用到name和age,但是name是使用索引检索,而age着重索引排序,这时age为范围查找,pos索引将失效

5、尽量使用覆盖索引(只访问索引的查询(索引和查询列一致)),减少select*。——按需取数据用多少取多少。

6、在MYSQL使用不等于(<,>,!=)的时候无法使用索引,会导致索引失效。

7、is null或者is not null 也会导致无法使用索引。

8、like以通配符开头('%abc...')MYSQL索引失效会变成全表扫描的操作。——覆盖索引。


 

分析:

  • 两边均有%时和左边有%时,索引会失效,而%在右边时,索引可用。
  • 解决like'%字符串%'时索引不被使用的方法:添加覆盖索引。

 在name和age上添加索引,查询,索引被使用。这样,单独查询name和单独查询age时都会使用到索引。

 

  • email没有加索引,这样like后,这样就会变成全表扫描。

9、字符串不加单引号索引失效。

10、少用or,用它来连接时索引会失效。

原文地址:https://www.jianshu.com/p/9c9a0057221f

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值