后端岗位面试题更新 2026-08-05

在 MySQL 中,索引是否总能提升查询性能?当怀疑索引未生效时,可以通过哪些方法进行排查和验证?

后端开发技术原理问题排查MySQL

考察说明

考查候选人对 MySQL 索引失效原理的理解,以及通过 EXPLAIN 等手段诊断索引使用情况的能力。

回答思路

  1. 【回答框架 1】索引并非总能生效,其是否被使用取决于查询条件、索引选择性、优化器成本估算以及表数据分布等因素;优化器会基于统计信息选择自认为代价最低的执行计划。
  2. 【回答框架 2】常见索引失效场景包括:对索引列使用函数或运算、隐式类型转换、like 以通配符开头、or 连接非索引列、联合索引未遵循最左前缀原则、负向查询(如 not in、!=)等。
  3. 【回答框架 3】排查索引效果的首要工具是 EXPLAIN,重点查看 type、key、rows、filtered 和 Extra 列;type 从 system 到 all 依次变差,key 显示实际使用的索引,Extra 中的 Using index 表示覆盖索引,Using filesort 或 Using temporary 则提示需要优化。
  4. 【回答框架 4】还可以通过 SHOW INDEX 查看索引基数,使用 optimizer_trace 观察优化器的成本决策,结合慢查询日志定位低效 SQL。
  5. 【回答框架 5】优化手段包括:改写 SQL 使其符合索引规则,调整索引列顺序以提升选择性,必要时使用覆盖索引或调整优化器开关,最终以实际执行时间和执行计划验证效果。
  6. 【关键点 1】索引是否生效由优化器基于成本决定,并非绝对。
  7. 【关键点 2】EXPLAIN 的 type、key、rows 是判断索引使用情况的核心字段。
  8. 【关键点 3】函数操作、隐式类型转换、最左前缀失效是常见索引失效原因。
  9. 【关键点 4】覆盖索引可避免回表,提高查询性能。
  10. 【易错点 1】不能仅凭存在索引就断定查询会走索引,需结合 EXPLAIN 确认。
  11. 【易错点 2】索引列上使用函数或计算会导致索引失效。
  12. 【易错点 3】联合索引必须满足最左前缀原则,否则无法充分利用索引。