MySQL的Explain
目录
警告
本文最后更新于 2023-02-28,文中内容可能已过时。
|
|
- id:表示要解释的查询的id。
- SELECT_TYPE:这里显示select子句中的复杂程度。
- SIMPLE:此选项指简单的 SELECT 语句;
- PRIMARY:此选项指包含完全由 MySQL 优化器执行的 SELECT 语句;
- SUBQUERY:此选项指子查询,它是一个独立的 SELECT 语句;
- DEPENDENT SUBQUERY:此选项指依赖于外部查询的子查询;
- DERIVED:此选项指通过 UNION 或 UNION ALL 合并的相关查询;
- UNCACHEABLE SUBQUERY:此选项指无法在缓存中找到的子查询。
- table:这里显示使用的表的名称。
- Partitions:显示查询中加入的表的分区数。
- type:表示连接类型。
system
:系统表或者临时表操作。const
:单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。(最好)eq_ref
:调用 PRIMARY KEY 匹配具体唯一数据行。ref
:指的是使用普通的索引(normal index)。(要求)range
:对索引进行范围检索。(至少)all
:全表扫描。
- possible_keys:可能被使用的键。
- key:被使用的键。
- key_len:使用的键的长度。
- ref:在查询中比较列时提及的任何形式的引用或不提及。
- rows:预计扫描行数。
- Filtered:使用WHERE子句中的条件过滤的行。
- Extra:关于执行查询的一些附加信息。
- Using where:在查询语句中使用了WHERE子句。
- Range checked for each record (index map: 0x4):使用某种索引的扫描。
- Using temporary:查询使用了临时表。
- Using filesort:使用sort_buffer排序扫描来实现排序或分组。
- Using index:使用了覆盖索引。
- Using index condition:使用了索引作为条件,有回表操作。
- Using join buffer (flat, BNL join):执行 Flat Join 或 Block Nested Loop (BNL) Join 这两种类型的 Join 操作。(尽量避免)
- Flat Join:一次完整的扫描(读取)一个表中所有记录,然后根据条件从另一张表中找到匹配的数据。
- Block Nested Loop (BNL) Join:将两个表中的元组划分为块,然后对于同一块中的所有元组,进行逐个比较,找到匹配的元组。