执行计划(query Execution plan)
语句格式:explain select * from emp
执行该语句并不会真正的查询出数据库表内的一行数据,而是有10列字段信息:
id,select_type,table,type,partitions,possible_keys,key,key_len,ref,rows,Extra
下面分别介绍各字段含义:
ID:
select出现的顺序号,如果含有子查询,id值从左往右逐渐增大,值越大,执行的优先级越高,即先被执行。id如果相同,执行顺序由上至下。
select_type:
simple:简单查询,查询不包含子查询和union。
primary:复杂查询的最外层的select
subquery:在select的子查询,但不在from子句。或子查询中的第一个select。
derived:衍生表,一般在复杂查询的from后的第一个select,可以提供查询出一个数据表。
type:
表示MySQL在表中找到数据行的方式,又称访问类型。查找数据行记录的大概范围。
常用的类型有: system, const, eq_ref, ref, range, index, ALL(从左到右,性能从最优到最差)
system
该表只有一行。这是const连接类型的特例
const
该表最多只有一个匹配行,在查询开头读取。因为只有一行,所以优化器的其余部分可以将此行中列的值视为常量。 const表非常快,因为它们只读一次。
eq_ref
对于前面表格中的每个行组合,从该表中读取一行。除了 system和 const类型之外,这是最好的联接类型。当连接使用索引的所有部分且索引是 索引PRIMARY KEY或UNIQUE NOT NULL索引时使用它。
ref
相比eq_ref.不使用唯一索引,而是使用普通索引或是联合索引的前缀,索引要和某个值相比较,可能会找到多个符合条件的行。
range
范围扫描通常出现在in(),between,>,<,>=等操作中。使用一个索引来检索给定范围的行。
index
扫描全表索引,通常比ALL快一些。
ALL
即全表扫描,意味着mysql需要从头到尾查找所需要的行,通常情况下这需要增加索引来进行优化。
possible_keys
该possible_keys列指示MySQL可以选择在此表中查找行的索引,指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
Key
key列显示MySQL实际决定使用的键(索引)
key_len
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)不损失精确性的情况下,长度越短越好。
创作时间:2019年11月25日16:55:52于公司