使用EXPLAIN可查看SQL执行计划,通过分析type、key、rows和Extra等字段优化查询性能,避免全表扫描和临时表,提升执行效率。

在MySQL中查看执行计划,主要使用 EXPLAIN 关键字。通过它,你可以了解SQL语句的执行方式,比如是否使用了索引、表的连接顺序、扫描行数等,从而优化查询性能。
使用EXPLAIN查看执行计划
在想要分析的SELECT、INSERT、UPDATE或DELETE语句前加上 EXPLAIN,即可获取该语句的执行计划。
-
基本语法:
EXPLAIN SELECT * FROM users WHERE id = 1; - 执行后会返回一个结果表,包含多个字段,用于描述执行过程。
执行计划关键字段说明
EXPLAIN 输出的结果包含多个列,以下是常用字段的含义:
- id: 查询编号,表示查询的顺序。相同则按从上到下执行,不同则数字越大优先级越高。
- select_type: 查询类型,如 SIMPLE(简单查询)、PRIMARY、SUBQUERY、DERIVED 等。
- table: 当前操作涉及的表名。
-
type: 连接类型,常见值有:
system 越靠前效率越高,ALL 表示全表扫描,应尽量避免。 - possible_keys: 可能使用的索引。
- key: 实际使用的索引。
- key_len: 使用索引的长度,越短通常越好。
- ref: 显示索引的哪一列被使用了,或者是一个常量。
- rows: 扫描的预估行数,数值越小越好。
-
Extra: 额外信息,常见的有:
- Using where:使用了where条件过滤
- Using index:使用了覆盖索引,性能好
- Using filesort:需要排序,可能影响性能
- Using temporary:使用临时表,应尽量避免
扩展:使用EXPLAIN FORMAT=JSON获取更详细信息
如果需要更详细的执行计划,可以使用JSON格式输出:
-
语法示例:
EXPLAIN FORMAT=JSON SELECT * FROM users WHERE age > 20; - 返回结构化JSON数据,包含成本估算、索引使用细节、过滤率等,适合深入分析。
使用技巧与建议
查看执行计划时,注意以下几点:
- 关注 type 是否为 ALL 或 index,考虑添加合适索引。
- 检查 Extra 中是否有 Using filesort 或 Using temporary,这些通常意味着性能瓶颈。
- 确保查询能命中索引,尤其是WHERE、ORDER BY、GROUP BY涉及的字段。
- 对于复杂JOIN语句,确认驱动表选择合理,小表驱动大表。
基本上就这些。通过EXPLAIN分析SQL执行路径,是优化MySQL查询最基础也最有效的方法之一。










