mysql 重新整理——索引优化explain字段介绍二 [十]
前言
紧接上文。
正文
type
type字段有如下类型:
1.all
2.index
3.rang
4.ref
5.eq_ref
6.const,system
7.null
最好到最差的顺序为:
system>const>eq_red>ref>range>index>all
优化的标准为至少达到range级别,最好是ref级别。
system 表只有一行记录,这是const类型的特列,基本不会出现。
const:表示通过一次就找到了,const 一般是在primary_key 或者 unique 索引。因为只匹配一行数据,所以很快。
eq_ref:唯一索引扫描,对每个索引键,只有一条记录与之匹配。
ref:非唯一索引扫描,返回匹配某个值的所有行。
range:只检索给定范围的行,使用一个索引来选择行。一般出现在between、>、<、in等查询中。
index:select id from t1 这时候是找出全部的索引,而不必去扫描表。
all 表示全表扫描来查询性能最低。
possible_key 、 key、key_len
possible_key 显示可能应用在这张表中的索引,一个或者多个。
查询设计的字段上若存在索引,则该索引将会被列出,但是不一定被使用。
其实这个就是我们写在where 中用到的索引。
key 为实际使用的索引。
有三种情况:
第一种:possible_key 为null ,而key 不为空,一般就是索引扫描,别名覆盖索引。
第二种:possible_key 有一个或者多个,然后key显示一个。
第三个:possible_key 为null,然后key为null。
key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。在不损失精确性的情况下,越短越好。
key_len 显示的值为索引字段的最大可能长度,并非实际长度,即:key_len 是根据表定义计算而得,不是通过表内检索出的。
ref
显示索引的那一列被使用了,如果可能的话,是一个常数。那些列或者常量被用于查找索引列上的值。
rows
根据统计信息及索引选用情况,大致估算出找到所需的记录锁需要读取的行数。
每张表有优化器查询的行数,这个比较好理解。
extra
显示是额外的信息。
这一篇比较详细:
https://blog.csdn.net/poxiaonie/article/details/77757471
字段比较多,就不详细介绍了。