索引不是每次都可以生效的,如果我们操作不对,那么很有可能是走全表扫描而不是走的索引,Explain 中的 possible_key、key_len 以及 key 参数都可以分析我们的 SQL 语句是否用到了索引。 以下情况将会导致索引失效 查询的列中使用了 != 比如 select id,name,age from student where id != 2; 查询中使用了 like 的左侧 "%" 查询的列中使用了函数操作,比如 pow(id,2) 对 id 做平方这种函数表达式,也不会用到索引 如果条件中有 or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因) 联合索引中即使满足最左前缀原则,但是第一个条件带了范围查询,那么也不会用到索引 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引 如果 MySQL 估计使用全表扫描要比使用索引快,则不使用索引 以上都可以使用 Explain 进行测试是否用到了索引。