EXPLAIN的输出格式在 MySQL 不同版本中不断丰富,从传统的表格,到结构化的 JSON,再到接近物理执行的树状和性能剖析格式。了解这些格式的细节,能让你从不同维度洞察优化器的决策,并精准定位性能瓶颈。1️⃣ 传统格式(TRADITIONAL)—— 表格视图这是默认输出格式,将执行计划按行(每个表或子查询一行)展示为表格。每一列都有特定含义。EXPLAINSELECT*FROMordersWHEREuser_id=10086ANDstatus='paid';输出示例:+----+-------------+--------+------+---------------------------+-------------------+---------+-------+------+-----------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+------+---------------------------+-------------------+---------+-------+------+-----------------------+ | 1 | SIMPLE | orders | ref | idx_usr_status,idx_usr_id | idx_usr_status | 10 | const | 50 | Using index condition | +----+-------------+--------+------+---------------------------+-------------------+---------+-------+------+-----------------------+🔢id查询的序列号,标识 SELECT 的标识符。值越大,优先级越高,越先执行;值相同则从上往下顺序执行。对于子查询、UNION,会有多个不同的id。🏷️select_type表示查询的类型,常见值:值含义SIMPLE简单查询,不包含子查询或 UNIONPRIMARY最外层的 SELECT(在包含子查询的语句中)SUBQUERY不在 FROM 中的子查询(标量或 IN 子查询等)DERIVEDFROM 中的子查询(派生表)UNIONUNION 中第二个或之后的 SELECTUNION RESULTUNION 的最终结果集DEPENDENT SUBQUERY依赖于外层查询的子查询DEPENDENT UNION依赖于外层查询的 UNION 中的某个 SELECTMATERIALIZED子查询被物化为临时表(MySQL 5.6+)UNCACHEABLE SUBQUERY结果无法缓存的子查询(如含非确定性函数)📦table显示的表名或派生表的别名(如derived2)。也可能是unionM,N(UNION 结果)。📊type(访问类型,最重要之一)从好到