本篇文章给大家带来的内容是关于MySQL中Explain的用法总结(详细),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
执行计划(query Execution plan)
语法
explain select * from table
explain 中的列
expain出来的信息有10列,
分别是id,select_type,table、type,partitions,possible_keys,key,key_len,ref,rows,Extra,下面对这些字段出现的可能进行解释:
一、ID
SQL执行的顺序的标识,SQL从大到小的执行
1、ID相同时,执行顺序由上至下
2、如果是子查询,ID的序号会递增,ID值越大优先级越高,越先被执行
3、ID如果相同,可以认为是一组,从上往下顺序执行;在所有组中,ID值越大,优先级越高,越先执行
二、select_type
示查询中每个select子句的类型
1、SIMPLE:简单的SELECT,不实用UNION或者子查询。
2、PRIMARY:最外层SELECT。
3、UNION:第二层,在SELECT之后使用了UNION。
4、DEPENDENT UNION:UNION语句中的第二个SELECT,依赖于外部子查询。
5、UNION RESULT:UNION的结果。
6、SUBQUERY:子查询中的第一个SELECT。
7、DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询。
8、DERIVED:导出表的SELECT(FROM子句的子查询)
9、MATERIALIZED:物化子查询
10、UNCACHEABLE SUBQUERY:无法缓存结果的子查询,必须为外部查询的每一行重新计算
11、UNCACHEABLE UNION:UNION 属于不可缓存的子查询的第二个或后一个选择
三、table
输出行引用的表的名称。这也可以是以下值之一:
-
<unionM,N,…>:该行指的是id值为M和id值为N的并集。
-
<derivedN>:该行是指用于与该行的派生表结果id的值 N。例如,派生表可以来自FROM子句中的子查询
-
<subqueryN>:该行指的是id 值为的行的具体化子查询的结果N
四、type
表示MySQL在表中找到所需行的方式,又称“访问类型”。
常用的类型有: NULL, system, const, eq_ref, ref, range, index, ALL(从左到右,性能从差到好)
以下列表描述了从最佳类型到最差类型的连接类型
NULL
MySQL在优化过程中分解语句,执
行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。
system
该表只有一行(如:系统表)。这是const连接类型的特例
const
该表最多只有一个匹配行,在查询开头读取。因为只有一行,所以优化器的其余部分可以将此行中列的值视为常量。 const表非常快,因为它们只读一次。
SELECT * FROM tbl_name WHERE primary_key=1;SELECT * FROM tbl_name WHERE primary_key_part1=1 AND primary_key_part2=2;
eq_ref
对于前面表格中的每个行组合,从该表中读取一行。除了 system和 const类型之外,这是最好的连接类型。当连接使用索引的所有部分且索引是 索引PRIMARY KEY或UNIQUE NOT NULL索引时使用它。
SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column;SELECT * FROM ref_table,other_table WHERE ref_table.key_column_part1=other_table.column AND ref_table.key_column_part2=1;
ref
表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值