MySQL Explain用法详解

2020-04-20 12:00:38 浏览数 (1)

output

列名

备注

id

select的编号,从1开始,如果是没有子查询,则编号为1,如果有子查询,则最外侧的select为1,然后按照select的顺序从左到右逐渐递增

select_type

查询类型,例如简单查询,子查询,Union查询等(具体见下表)

table

select所访问的表(也可以是派生表)

partitions

用于分区表, 表示select所访问的表的分区

type

表示该select查询经过优化器优化之后,访问数据的类型,该类型反映了查询性能,如果是all,则性能最差,表示全表扫描;如果是const,则性能最好,表示采用组建索引或者唯一索引并且仅返回一行数据。

possible_keys

表示可能会用到的索引用来加速查询,未经过优化器确定。

key

经过优化器确定之后,实际采用的索引

key_len

实际采用的索引的字段长度.(计算方式与字符集、字段类型是否为固定长度以及是否可以为null有关系)

ref

表示key在查找数据的时候,所用到的常量或者列名

rows

查询所扫描的行数,但是一般不准确。

filtered

表示要与另外一张表join并且满足join条件的行数。

extra

查询的一些额外信息(using index 、using where和 using temporary等)。

select_type

取值

备注

simple

不包含子查询和union查询的简单查询

primary

在子查询或者Union查询里面 最外层的查询

union

在union查询中,后面的查询都是union查询

derived

select语句里面的 from 是另外一个查询的结果,为派生查询;

subquery

select语句中where条件所引用的值 是另外一个查询的结果,为子查询;

key_len

key_len的计算首先和字符集相关,如果是字符集是latin1,则一个字符占一个字节;如果是utf8则一个字符占3个字节;并且,如果类型是 varchar这种不定长,则还需要两个字节存储长度,最后 如果字段允许为空,则还需要额外一个字节存储是否为空。

type

system

const类型的一种特殊情况,当且仅当表里面只有一行数据。

const

查询使用主键或者唯一索引查询,并且仅返回一行数据。

ref

一种索引访问,它返回所有匹配某个单个值的行。此类索引访问只有当使用非唯一性索引或唯一性索引非唯一性前缀时才会发生。这个类型跟eq_ref不同的是,它用在关联操作只使用了索引的最左前缀,或者索引不是UNIQUE和PRIMARY KEY。ref可以用于使用=或<=>操作符的带索引的列.或者仅查询主键,并且condition里面使用索引。

range

索引扫描,condition里面一般是主键或者唯一性索引或者复合索引里面前缀,range一般是<=,=>,between and, in 、not in 范围查询。

index

select的列,不用去扫描数据行,可以直接在索引树中直接返回,并且condition里面需要全表扫描索引树。

all

全表扫描,一般where里面没有使用索引查询。

extra

using index

使用覆盖索引的时候就会出现

using where

在查找使用索引的情况下,需要回表去查询所需的数据

using index condition

查找使用了索引,但是需要回表查询数据

using index & using where

查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据

0 人点赞