MYSQL索引失效的情况
存在以下情况索引会失效:
1.未遵循最左前缀原则
如果是联合索引,则要遵循最左前缀原则。即从索引的最左列开始,并且不能跳过索引中的列。如果跳过某一列,索引将部分失效(后面的字段索引失效)。
2.范围查询
当查询条件中有>,<时,后边的字段不走索引(范围查询右侧的列失效)。
注:可以将>换成>=,<改成<=,这样索引不会失效。
3.索引列运算
如果对索引列进行运算操作,索引将失效。
select * from test where substring(phone,10,2)='15';
4.字符串不加引号
如果是字符串,查询时不加引号,会发生隐式类型转换,索引失效。
select * from test where phone like 16657000999;
#phone字段在表中是字符串类型
5.模糊查询
若仅仅是尾部模糊匹配,索引不会失效;
若是头部模糊匹配,索引会失效。
select * from test where name like 'a%'; # 有效
select * from test where name like '%a'; #失效
6.or连接的查询条件
只有or两侧都有索引才不会失效,其他情况索引会失效。
7.数据分布影响
若MYSQL评估使用索引比全表更慢,则不使用索引。