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
查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据