MySQL :: MySQL 8.2 Reference Manual :: 8.8.2 EXPLAIN Output Format
explain命令提供了mysql数据库如何执行SQL语句的信息,可以跟 SELECT, DELETE, INSERT, REPLACE, UPDATE, 和 TABLE一起使用。
explain命令可能输出多行,每行涉及一个表 。
先来看一个实际的执行,假设执行explain select * from test_table where type='register';输出如下:
explain命令输出的列如下:
Table 8.1 EXPLAIN Output Columns
Column | JSON Name | Meaning |
---|---|---|
id | select_id | The SELECT identifier |
select_type | None | The SELECT type |
table | table_name | The table for the output row |
partitions | partitions | The matching partitions |
type | access_type | The join type |
possible_keys | possible_keys | The possible indexes to choose |
key | key | The index actually chosen |
key_len | key_length | The length of the chosen key |
ref | ref | The columns compared to the index |
rows | rows | Estimate of rows to be examined |
filtered | filtered | Percentage of rows filtered by table condition |
Extra | None | Additional information |
id
:select的标识符。- select_type:select的类型,取值如下:
elect_type Value | JSON Name | Meaning |
---|---|---|
SIMPLE | None | Simple SELECT (not using UNION or subqueries) |
PRIMARY | None | Outermost SELECT |
UNION | None | Second or later SELECT statement in a UNION |
DEPENDENT UNION | dependent (true ) | Second or later SELECT statement in a UNION, dependent on outer query |
UNION RESULT | union_result | Result of a UNION. |
SUBQUERY | None | First SELECT in subquery |
DEPENDENT SUBQUERY | dependent (true ) | First SELECT in subquery, dependent on outer query |
DERIVED | None | Derived table |
DEPENDENT DERIVED | dependent (true ) | Derived table dependent on another table |
MATERIALIZED | materialized_from_subquery | Materialized subquery |
UNCACHEABLE SUBQUERY | cacheable (false ) | A subquery for which the result cannot be cached and must be re-evaluated for each row of the outer query |
UNCACHEABLE UNION | cacheable (false ) | The second or later select in a UNION that belongs to an uncacheable subquery (see UNCACHEABLE SUBQUERY ) |
table
:这一行的输出涉及的表名 。partitions
:查询从哪个分区匹配到的记录。如果不是分区表,那么该返回的值为NULL。type
:join 类型。各种类型的解释请参考https://dev.mysql.com/doc/refman/8.2/en/explain-output.html#explain-join-types- possible_keys:一个索引列表,mysql可以从其中选择索引,来找到要查询的行。
key
:mysql最终决定使用的索引。key_len
:mysql最终决定使用的索引的长度。ref
:使用key
列指定的索引,找到要查询的记录,用哪些列或者常数跟索引进行比较。rows
:mysql认为它找到要查找的记录所要遍历的行数。filtered
:用表的条件过滤表的行数据的百分比,最大值是100。Extra
:包含了mysql如何解析查询的额外信息。各种取值请参考:MySQL :: MySQL 8.2 Reference Manual :: 8.8.2 EXPLAIN Output Format