贝利信息

SQL EXPLAIN 输出字段逐项解析

日期:2026-01-21 00:00 / 作者:冷炫風刃
EXPLAIN 是 MySQL 查看查询执行计划的核心命令,用于优化慢查询;其输出字段包括 id(SELECT 序号)、select_type(查询类型)、table(访问表名)、type(连接类型,性能由优到劣为 system→const→eq_ref→ref→range→index→ALL)、possible_keys 与 key(候选及实际索引)、key_len(索引使用字节数)、rows(预估扫描行数)、filtered(条件过滤百分比)、Extra(额外信息如 Using index、Using filesort 等)。

EXPLAIN 是 MySQL 中用于查看 SQL 查询执行计划的核心命令。理解其输出字段,是优化慢查询、识别性能瓶颈的关键一步。下面按 MySQL 8.0+ 常见输出列顺序,逐项说明含义、关键取值及实际判断要点。

id:查询中每个 SELECT 的唯一标识

表示 SELECT 的序列号,从 1 开始递增。相同 id 表示这些操作属于同一层级(如简单查询或 UNION 中的并列子句);不同 id 表示嵌套关系,id 越大越先执行(因为依赖外层结果)。常见情况:

select_type:当前 SELECT 所处的逻辑位置

描述该行对应的是哪种类型的查询片段,直接影响执行方式和优化策略:

table:当前操作访问的表名或别名

显示这一行计划作用于哪张表。可能的值包括:

type:连接类型,反映访问表数据的方式(性能排序由优到劣)

这是最关键的字段之一,直接体现是否用上索引、扫描范围有多大:

possible_keys 与 key:索引选择的实际路径

possible_keys 是优化器认为可用的索引列表(基于 WHERE 条件推断);key 是最终选定使用的索引名。

key_len:实际用到的索引字节数

用于判断联合索引中用了几列,以及是否涉及 NULL 或变长字段:

rows:预估需要扫描的行数

优化器基于统计信息估算的“这一行计划”将检查多少行。不是返回行数,而是访问开销指标:

filtered:该表条件过滤后的行数百分比(MySQL 5.7+)

表示经过 WHERE 条件(不含 JOIN 条件)后,保留的比例(0–100)。例如 filtered=10.00 表示只留下约 10% 的行。

Extra:补充说明,含大量性能线索

常见关键值及其含义: