困难 · 高频 5/5
MySQL 索引失效的问题如何排查?
先用 EXPLAIN 看执行计划,再检查联合索引顺序、函数计算、隐式类型转换、范围查询、排序和统计信息是否导致优化器放弃索引。
简短答案
先用 EXPLAIN 看执行计划,再检查联合索引顺序、函数计算、隐式类型转换、范围查询、排序和统计信息是否导致优化器放弃索引。
详细解析
索引失效排查要从 SQL、索引结构、数据分布和优化器选择四个角度看。
- 确认 where 条件是否满足最左前缀。
- 避免在索引列上使用函数、表达式或隐式转换。
- 范围查询后的列通常无法继续充分利用联合索引。
- 排序、回表成本和低选择性字段可能让优化器选择全表扫描。
- 必要时更新统计信息或改写 SQL。
面试回答模板
我会先拿 EXPLAIN 看 type、key、rows、Extra,再根据联合索引规则和数据分布判断是不是 SQL 写法、索引顺序或优化器成本导致没走索引。
易错点
- 只背结论,不解释原理和边界。
- 忽略真实生产环境中的容量、延迟、一致性和失败重试。
- 没有结合项目经验说明为什么这样设计。
常见追问
- 这个方案在高并发下有什么风险?
- 如果数据规模扩大十倍,你会如何调整?
- 线上出现异常时,你会先看哪些指标?