1.like以%开头,索引无效;
举例字段name创建索引
nameLike‘%abc’失效
nameLike‘abc%’有效
2.or语句前后没有同时使用索引
举例name、age两个字段创建索引
and(namelike‘abc%’orsex=’1’)索引失效
and(namelike‘abc%’orage=18)索引有效
3.不满足最左前缀原则
组合索引(name,age,sex)
whereage=18andset=1无效
whereset=1无效
whereage=18andname=‘小红’有效
wherenamelike‘小%’有效
特殊场景范围索引列没有放在最后,会导致后面的索引失效
wherename=‘小红’andage18andsex=1
索引name、age有效,set无效。
4.索引列有计算
select*fromstudentwhereage+1=18age索引无效
5.索引列上使用了函数
Name为索引
whereleft(name,2)=‘小红’无效
6.字符类型没加引号
name为字符串
wherename=1
7.使用notin会导致索引失效
8.使用不等号会导致索引失效(!=或者)
9.使用isnotnull或者isnull会导致索引失效
10.使用了select*fromtable索引无效
Selectnamefromstudent;name索引有效
特别说明
mysql通过索引扫描的行记录数,如果超过全表的10%至30%左右,优化器也可能不会走索引,自动变成全表扫描。