2025年Java面试宝典最新版下载地址(点击蓝色文字立即获取)
作为经常要优化SQL查询的开发者,我发现在面试中经常被问到如何用EXPLAIN分析查询性能。今天就以真实的项目经验,手把手教你掌握这个MySQL的实用技能。

二、为什么要用EXPLAIN做查询分析
当线上系统出现慢查询时,EXPLAIN是我们的头号诊断工具。它能展示MySQL执行查询的具体计划,相当于给SQL语句做X光检查。通过解析type字段的值,我们能立即判断是否用到了索引扫描;查看rows列可以预估扫描行数;extra字段更是藏着执行计划的"健康指标"。
三、看懂这6个核心指标
1. type字段暴露查询类型
这是判断查询效率的首要指标。常见的有:
- const:通过主键/唯一索引查到单条数据
- ref:使用普通索引扫描
- range:索引范围扫描(常见于between、>等操作)
- index:全索引扫描
- ALL:全表扫描(需要重点关注)
2. possible_keys和key的差异
possible_keys显示可能用到的索引,而key是实际使用的索引。如果这两个字段差异大,说明存在索引失效的情况,需要检查where条件字段类型是否匹配。

3. rows不是最终答案
这里显示的是预估扫描行数,实际执行可能会有波动。但当这个数值超过1万时,就说明可能需要优化了,尤其是配合filesort出现的时候。
4. filtered字段的隐藏信息
表示存储引擎返回数据后,经过server层过滤后剩余数据的百分比。低于10%的数值可能意味着索引效率低下。
5. Extra里的危险信号
- Using filesort:需要内存或磁盘排序
- Using temporary:创建了临时表
- Using where:需要回表查询 出现这些提示要特别注意,可能成为性能瓶颈
四、实战优化三板斧
1. 消灭全表扫描
当type=ALL时,立即检查where条件是否包含索引字段。曾有个订单表查询因为忘记给status字段建索引,导致每次查询扫描50万行数据。
2. 索引覆盖的妙用
如果Extra出现"Using index",说明查询所需字段都在索引中。有个用户表查询,通过把select *改成具体字段,查询时间从800ms降到了50ms。

3. 警惕索引合并
当possible_keys出现多个索引时,要评估是否需要force index。某次分页查询使用索引合并反而导致性能下降,强制指定时间字段索引后性能提升3倍。
如果在准备面试时需要系统复习MySQL优化知识,可以通过面试鸭返利网联系我购买会员,现在通过返利渠道可立减25元。记得结合执行计划分析,再配合慢查询日志,才能真正掌握SQL调优的精髓。


