mysql 重新整理——索引优化explain字段介绍二 [十]

webliyang 2020-06-03

前言

紧接上文。

正文

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

字段比较多,就不详细介绍了。

相关推荐