1.对索引使用左模糊匹配或者左右同时模糊匹配时(B+树(多路平衡查找树)的特性决定)
2.对索引使用函数(因为索引保存的是索引字段的值,而不是经过函数计算后的值)
3.对索引表达式进行计算(比如where id + 1 = 10,改成 where id = 10 - 1可以)
4.对索引进行隐式类型转换(如果索引字段是字符串类型,但是条件是整型的话就会做全表扫描)
5.联合搜索引没使用最左匹配原则
假设(a,b,c)联合索引,如果条件是where a=1或者a=1 and b=2或者a=1 and b=2 and c=3,是生效的
但是这几种情况失效,where b=2或者where c=3或者where b=2 and c=3
如果是wehre a=1 and c=2,在mysql5.6及之后有一个索引下推功能,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。
6.where语句中使用or,同时or前的条件列是索引列,or后的条件列是索引列。