使用EXPLAIN可查看MySQL查询执行计划,通过分析type、key、rows和Extra等列判断查询效率,优先避免ALL全表扫描和Using filesort等问题,结合EXPLAIN ANALYZE实际执行效果优化SQL性能。

在MySQL中查看查询执行计划,主要使用 EXPLAIN 关键字。通过它,可以了解MySQL如何执行SQL语句,比如是否使用索引、表的连接顺序、扫描行数等,帮助优化查询性能。
使用EXPLAIN查看执行计划
在SELECT语句前加上EXPLAIN,即可获取执行计划信息:
EXPLAIN SELECT * FROM users WHERE id = 1;执行后会返回一个结果表,包含以下关键列:
- id:查询编号,表示查询的顺序,相同则按从上到下执行,不同则数字越大优先级越高
- select_type:查询类型,如 SIMPLE(简单查询)、PRIMARY、SUBQUERY 等
- table:涉及的表名
- type:连接类型,常见有 system、const、eq_ref、ref、range、index、ALL,越靠前效率越高
- possible_keys:可能使用的索引
- key:实际使用的索引
- key_len:所用索引长度,越短通常越好
- ref:显示索引哪一列被使用了,或常量值
- rows:MySQL估计需要扫描的行数,数值越小越好
- Extra:额外信息,如 "Using where"、"Using index"、"Using filesort" 等,对优化很关键
EXPLAIN FORMAT选项
MySQL支持不同格式的执行计划输出:
EXPLAIN FORMAT=JSON SELECT * FROM users WHERE name = 'Tom';使用FORMAT=JSON可以获得更详细的执行信息,包括成本估算、条件过滤等,适合深入分析。
扩展:EXPLAIN ANALYZE(MySQL 8.0+)
在MySQL 8.0及以上版本,支持 EXPLAIN ANALYZE,它会实际执行SQL并返回真实执行过程:
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 25;该命令展示实际运行时间、循环次数等,比EXPLAIN更精准,用于性能调优非常有效。
常见执行计划分析要点
查看执行计划时重点关注:
- type是否为ALL(全表扫描),应尽量避免
- key是否命中预期索引
- rows数值是否过大
- Extra中是否有“Using filesort”或“Using temporary”,这些通常意味着性能瓶颈
基本上就这些。合理使用EXPLAIN,能快速定位慢查询原因,指导索引设计和SQL改写。不复杂但容易忽略细节。










