困难 · 高频 5/5

MySQL 索引失效的问题如何排查?

先用 EXPLAIN 看执行计划,再检查联合索引顺序、函数计算、隐式类型转换、范围查询、排序和统计信息是否导致优化器放弃索引。

简短答案

先用 EXPLAIN 看执行计划,再检查联合索引顺序、函数计算、隐式类型转换、范围查询、排序和统计信息是否导致优化器放弃索引。

详细解析

索引失效排查要从 SQL、索引结构、数据分布和优化器选择四个角度看。

  • 确认 where 条件是否满足最左前缀。
  • 避免在索引列上使用函数、表达式或隐式转换。
  • 范围查询后的列通常无法继续充分利用联合索引。
  • 排序、回表成本和低选择性字段可能让优化器选择全表扫描。
  • 必要时更新统计信息或改写 SQL。

面试回答模板

我会先拿 EXPLAIN 看 type、key、rows、Extra,再根据联合索引规则和数据分布判断是不是 SQL 写法、索引顺序或优化器成本导致没走索引。

易错点

  • 只背结论,不解释原理和边界。
  • 忽略真实生产环境中的容量、延迟、一致性和失败重试。
  • 没有结合项目经验说明为什么这样设计。

常见追问

  • 这个方案在高并发下有什么风险?
  • 如果数据规模扩大十倍,你会如何调整?
  • 线上出现异常时,你会先看哪些指标?

相关题目

继续刷题
MySQL 入门 ★★★★

Mysql

Mysql 是 MySQL 中需要重点复习的条目,已从金山文档目录导入,后续可在后台补充完整答案、代码示例和图片。