- like以通配符%开头索引失效(最左匹配原则)
- is null可以使用索引,is not null无法使用索引
- 不等于(!= 或者<>)导致索引失效
- 数据库和表的字符集不统一
- 关联查询字段的⻓度不一样
- OR 前后只要存在非索引的列,都会导致索引失效
- 计算、函数、类型转换导致索引失效
- 主键插入顺序
- 组合索引,不是使用第一列索引,索引失效
- 范围条件右边的列索引失效
explain select * from student_info where name='11111' and course_id>1 and class_id=1;
class_id的索引用不到
- 两列数据做比较,即便两列都创建了索引,索引也会失效
explain select * from t_user where id > age;
- 查询条件使用not in时,如果是主键则走索引,如果是普通索引,则索引失效
- 当查询条件涉及到order by、limit等条件时,是否走索引情况比较复杂,而且与Mysql版本有关,通常普通索引,如果未使用limit,则不会走索引。order by多个索引字段时,可能不会走索引。其他情况,建议在使用时进行expain验证
- 当全表扫描速度比索引速度快时,mysql会使用全表扫描,此时索引失效
参考资料:
mysql索引失效的常见9种原因详解_数据库开发_book多得-DevPress官方社区
欢迎补充!