explain
查询 SQL 的执行计划
explain extended
会在 explain 的基础上额外提供一些查询优化的信息。 紧随其后通过 show warnings 命令可以 得到优 化后的查询语句,从而看出优化器优化了什么
explain partitions
相比 explain 多了个 partitions 字段, 如果查询是基于分区表的话,会显示查询将访问的分区。
目前 explain 会直接带 partitions 字段了
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
select_type
可能值
SIMPLE:简单查询。查询不包含子查询和 union PRIMARY:最外层 SELECT UNION:第二层,在 SELECT 之后使用了 UNION。 DEPENDENT UNION:UNION语句中的第二个 SELECT,依赖于外部子查询。 UNION RESULT:UNION 的结果 SUBQUERY:子查询中的第一个 SELECT。 DEPENDENT SUBQUERY:子查询中的第一个 SELECT,取决于外面的查询。 DERIVED :导出表的 SELECT(FROM 子句的子查询) MATERIALIZED:物化子查询 UNCACHEABLE SUBQUERY:无法缓存结果的子查询,必须为外部查询的每一行重新计算 UNCACHEABLE UNION :UNION 属于不可缓存的子查询的第二个或后一个选择
table
可能值
union <unionM,N,...>:该行指的是 id 值为 M 和 id 值为 N 的并集。 derived <derivedN>:该行是指用于与该行的派生表结果 id 的值 N。 例如,派生表可以来自 FROM 子句 subquery <subqueryN>:该行指的是 id 值为的行的具体化子查询的结果 N NULL
type
可能值
NULL MySQL 在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。 system 该表只有一行(如:系统表)。这是 const 连接类型的特例 const 该表最多只有一个匹配行,在查询开头读取。因为只有一行,所以优化器的其余部分可以将此行中列的值视为常量。const 表非常快 因为它们只读一次。SELECT * FROM tbl_name WHERE primary_key=1; eq_ref 除了 system 和 const类型之外,这是最好的连接类型。当连接使用索引的所有部分且索引是 PRIMARY KEY 或 UNIQUE NOT NULL 索引时使用它。 ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 fulltext 使用 FULLTEXT 索引执行连接。 ref_or_null 该联接类型如同 ref,但是添加了 MySQL 可以专门搜索包含 NULL 值的行。SELECT * FROM ref_table WHERE key_column IS NULL; index_merge 该指数合并访问方法检索与多行 range 扫描和他们的结果合并到一个。 此访问方法仅合并来自单个表的索引扫描,而不扫描多个表。 unique_subquery 该类型替换了下面形式的 IN 子查询的 ref: value IN (SELECT primary_key FROM single_table WHERE some_expr) unique_subquery 是一个索引查找函数,可以完全替换子查询,效率更高。【不常用】 index_subquery 该联接类型类似于 unique_subquery。可以替换 IN 子查询,但只适合下列形式的子查询中的非唯一索引: value IN (SELECT key_column FROM single_table WHERE some_expr)。【不常用】 range 只检索给定范围的行,使用一个索引来选择行。 index 该联接类型与 ALL 相同,Full Index Scan,index 与 ALL 区别为 index 类型只遍历索引树。 这通常比 ALL 快,因为索引文件通常比数据文件小。 ALL Full Table Scan, MySQL 将遍历全表以找到匹配的行。
possible_keys 可能使用的索引 key 实际使用的索引 key_len 显示的是索引字段的最大可能长度,不是实际使用长度 ref 使用哪个列或常数 rows MySql 认为它执行查询时必须检查的行数。( 扫描出的行数 [估算的行数 ]。) filtered 通过表条件过滤出的行数的百分比估计值 Extra MySql 执行情况的描述和详细说明