1.违反了最左前缀匹配法则
2.在索引列上做计算或者函数操作,也会导致索引失效从而进行全表扫描
比如select * from table where name=”zhangsan“ 是会走索引的
但是select * from table where left(name,2)=”zhangsan“,对索引列进行了函数操作,就不会走索引了
3.where子句中使用不等于,也会使得索引失效
select * from table where name!=”zhangsan“
4.is null可以使用索引,但是is not null无法使用索引
select * from table where name is null可以使用索引
select * from table where name is not null就无法使用索引
5.like以通配符开头 也会导致索引失效
select * from table where name like ”%明“
注意:不以通配符开头,只是包含通配符,还是会走索引的
(a,b,c)三个字段组成一个联合索引
where a = 3 and b like ‘kk%' and c=4 使用到了a,b,c
where a = 3 and b like ’%kk' and c=4 只用到了a
where a = 3 and b like ‘%kk%’ and c = 4 只用到了a
where a = 3 and b like ‘k%kk% and c = 4 使 用到a,b,c
6.字符串不加单引号也会使得索引失效
select * from table where name=123
7.在where子句中使用or导致索引失效
select * from table where name=”zhangsan“ or age=22