MySql索引失效会引起很多很难排查的系统卡顿、慢查询等问题。将项目上和网上查找到的索引失效问题总结为7中场景:索引失效的7字诀(对应7种场景)“模型数空运最快”
- 模:代表模糊查询,like的模糊查询以%开头,索引失效。
- 型:代表数据类型,如字段类型为varchar, where条件用number,索引也会失效。
- 数:代表函数,对索引字段使用内部函数,索引也会失效。
- 空:代表Null值,索引不存储空值,如果不限制索引列是Not Null, DB会认为索引列可能为空,就不会按照索引进行计算。(注:新版Mysql中修复了这个问题。)
- 运:代表运算,对索引列进行加、减、乘、除等运算,会导致索引失效。
- 最:代表最左原则,在复合索引中索引列的顺序至关重要。如果不是按照索引的最左列开始查找,则不使用索引。Ref: mysql复合(组合)索引失效的几种情况总结(未使用索引、索引中断、范围查询、否定条件、模糊查询、使用函数、类型转换及“key_len”的说明)_whl8614john的博客-CSDN博客_mysql组合索引失效的情况
- 快:代表全表扫描更快。如果数据库预计使用全表扫描更快,则不使用索引。