MySQL Explain 指南

MySQL Explain 指南

  • id

  • select_type

  • table

  • partitions

  • type

  • possible_keys

  • key

  • keylen

  • ref

  • rows

  • filtered

  • Extra

  • 使用 explain 执行 DML 语句时,数据不会发生变化。

  • explain 的结果可能包含多行数据,每行对应一个表。若涉及 union 操作,MySQL 会创建临时表,导致结果中多出一行。

  • union all 不会创建临时表,因此结果行数不会增加。

id

id 是查询的标识符,值越大优先级越高:

  • 对于多表 join,因为只涉及一个 select,id 会重复。
  • 在子查询中,MySQL 优化器可能将子查询转换为 join,导致所有 select 的 id 为 1。
  • 若涉及 union,临时表的 id 值为 null。

select_type

表示查询类型,主要包括:

  • SIMPLE:简单查询,不包含 union 或子查询。
  • PRIMARY:主查询,复杂查询的最外层查询,或 union 中左侧表。
  • SUBQUERY:独立子查询。
  • DEPENDENT SUBQUERY:依赖外部查询的子查询。
  • DERIVED:派生表,从查询结果派生的临时表(from 后的子查询)。
  • UNION:UNION 查询中的子查询类型。
  • UNION RESULT:UNION 查询的结果集。
  • DEPENDENT UNION:依赖外部查询的 UNION 查询。
  • UNCACHEABLE SUBQUERY:不可缓存的子查询。
  • UNCACHEABLE UNION:不可缓存的 UNION 查询。

table

表示操作的表类型和名称,包括:

  • 实际表名:SQL 中直接引用的表。
  • <derivedN>:派生表。
  • <unionM-N>:UNION 查询中的结果集。
  • <temporary>:临时表。
  • <subqueryN>:子查询结果。

partitions

显示查询使用的分区,有助于分析查询优化器选择的分区。

type

返回查询使用的访问方法,与索引相关:

  • system:用于仅含一条记录的表。
  • const:使用主键或唯一索引的等值匹配。
  • eq_ref:使用主键或唯一索引的 join。
  • ref:使用非唯一索引的等值匹配。
  • range:索引列的范围匹配。
  • index:扫描整个索引树,常见于覆盖索引。
  • ALL:全表扫描。
  • ---------- 以下是不常见类型 ----------
  • fulltext:全文索引。
  • ref_or_null:等值匹配且条件包含 or null。
  • index_merge:使用多个单列索引。
  • unique_subquery 和 index_subquery:使用子查询索引。

possible_keys

列出根据 where 或 group by 字段可能使用的索引,实际执行时未必会使用这些索引。

key

表示实际选择的索引。

keylen

索引字段的最大长度,单位为字节。对于联合索引,该值有参考意义。

ref

索引列的等值匹配对象,主要用于性能分析。

rows

预估需扫描的行数,值越小越好,范围越精准查找越快。

filtered

表示表行按条件过滤后的估计百分比,越高越好,最大值为100。

Extra

备注信息,包括:

  • Using temporary:使用 union 创建的临时表。
  • Using index:使用覆盖索引。
  • Using where:通过 where 过滤数据。
  • Using filesort:对结果集进行文件排序。
  • Using join buffer:使用连接缓冲区。
  • Impossible WHERE:where 条件恒为 false,查询返回空集。
  • Select tables optimized away:优化跳过了不必要的表。
  • Full table scan:进行全表扫描。
  • Using index condition:使用索引下推。
  • Using index for group-by 和 order by:索引用于分组和排序。
  • Distinct 、Order by 等其他操作描述。
相关推荐
IvorySQL23 分钟前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
刘胡子大叔1 小时前
SQL 脚本的导入顺序
数据库·sql
代码什么用1 小时前
Spring对IoC的实现
数据库·spring
hz567893 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC3 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday3 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
半杯咖啡半行码4 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
Yyyyyy~4 小时前
[ Mysql ] 库的操作
mysql
小米里的大麦4 小时前
16 MySQL 事务
数据库·mysql
西柚小萌新4 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库