MySQL 索引失效的场景
-
使用 or 导致索引失效
select * fromuser
where user_id = 1 or age = 20;
user_id和age是索引,以上语句索引失效。 -
where语句中索引列使用了负向查询,可能会导致索引失效
负向查询包括:NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等 -
索引字段可以为null,使用is null或is not null时,可能会导致索引失效
-
数据类型隐士转换(如果原数据类型是字符串,查询条件使用了整型,则无法利用索引,反之可以,但不建议这么做)
当where 条件之后的类型和表结构定义的类型不一致的时候,MySQL会做隐式的类型转换
-
对索引列进行运算,一定会导致索引失效
-
like通配符可能会导致索引失效
以%开头的like 查询语句不能利用B-tree 索引
-
联合索引中,where中索引列违背最左匹配原则,一定会导致索引失效
-
没有 where 条件