SQL索引失效的几种情况

1、 没有正确使用复合索引

例如我们根据user表中的A,B,C创建一个符合索引

create index on user(A,B,C)

实际上mysql是为我们创建了三个索引

  1. A
  2. AB
  3. ABC

假如你从B 或者C 开始查 就没有用到索引

select B from user while B = ‘b’

2、范围查询右边的列使用索引无效

select A from user where C > 1 and A = 'a'

3、对索引列进行运算,索引失效

select A from user where subString(A,3,2) = '科技'

4、字符串类型没有加 ’ ', 索引失效

在查询中,没有对字符串加单引号,MySQL的查询优化器,会自动的进行类型转化,造成索引失效

5、select * 可能导致失效

查询全部的字段,有一些字段可能没有建立索引,导致需要去表中查询,所以会导致索引失效

6、or 前后字段有一个没有建立索引,另外一个索引也失效

7、模糊查询 like

  • 尾部模糊匹配,like ‘某某值 %’ ,索引不失效
  • 头部模糊匹配,like ‘% 某某值’ ,索引失效

8、in , no in ,null ,not null 有时候

因为我们索引的目的是为了快速定位,如果值全是null 这个时候,索引就没有意义,直接走全表查询,如果只有一个null ,那就可以快速的定位出来

猜你喜欢

转载自blog.csdn.net/weixin_45844836/article/details/112711837