暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL-执行计划

董源龙 2021-08-26
311



字段

含义

id


select_type


table

表示查询涉及的表或衍生的表

type

判断sql性能和优化程度重要指标

执行效率

ALL < index < range< ref < eq_ref < const < system

避免ALLindex

constrefrange,本质都是基于索引树的二分查找和多层跳转来查询,所以性能一般都是很高的,然后接下来到index这块,速度就比上面三种要差一些了,因为他是走遍历二级索引树的叶子节点的方式来执行了,那肯定比基于索引树的二分查找要慢多了,但是还是比全表扫描好一些的

possible_keys

Mysql在执行该sql语句的时候,可能用到的索引信息,实际不一定会用到。

key

mysql 在当前查询时所真正使用到的索引。possible_keys的子集

key_len

查询优化器使用了索引的字节数

评估组合索引是否完全被使用

这也是我们优化sql时,评估索引的重要指标

ref


rows

重要的字段

mysql 查询优化器根据统计信息,估算该sql返回结果集需要扫描读取的行数。

索引优化之后,扫描读取的行数越多,说明要么是索引设置不对,要么是字段传入的类型之类的问题

说明要优化空间越大

filtered

返回结果的行占需要读到的行(rows列的值)的百分比,就是百分比越高,说明需要查询到数据越准确,百分比越小,说明查询到的数据量大,而结果集很少。

extra





id




id

id相同

执行顺序由上而下


id不同

值越大越先被执行

select_type




select_type

SIMPLE

表示此查询不包含 UNION 查询或子查询


PRIMARY

表示此查询是最外层的查询


SUBQUERY

子查询中的第一个 SELECT


UNION

表示此查询是 UNION 的第二或随后的查询

table

type




type

system

const的特殊情况,此时说明表中只有一行数据,直接返回。


const


主键索引或唯一索引查询极快

当查询最多匹配一行时,常出现于where条件是=的情况,一般常用于等值扫描或者唯一性索引扫描

select * from A where A.id=2


eq_ref

这种相当于多表之间关联查询

select A.* from A,B where A.id=B.userId

其中Aid对于B.userId是一一对应的

查询效率较高


ref

普通索引索引查询

此类型通常出现在多表的联合查询,使用了非唯一或非主键索引,或者匹配最左前缀规则索引的语句

select A.* from A where A.name='a' and A.sex=‘m'namesex构成一个组合索引


 range

索引范围查询

通过索引字段范围获取表中部分数据记录。这个类型通常出现在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中。


index

 表示全索引扫描(full index scan) 

index 类型扫描所有的索引, 而不扫描数据。

index 类型通常出现在:所要查询的数据直接在索引树中就可以获取到而不需要扫描数据,但是索引本身数量很多,内容很大,那么执行效率很低。

不需要回源到聚簇索引

针对这种只要遍历二级索引就可以拿到数据

不需要回源到聚簇索引的访问方式


 ALL

表示全表扫描

性能最差的查询之一

随着表的数量增多,执行效率越慢

possible_keys

key

key_len

ref

rows

filtered




extra





extra


using filesort

         

对结果集进行外部排序

不能通过索引顺序达到排序效果

一般有 using filesort都建议优化去掉,

因为这样的查询 cpu 资源消耗大,延时大。


using index

覆盖索引扫描

表示查询在索引树中就可查找所需数据,

不用扫描表数据文件,往往说明性能不错。


using temporary

查询有使用临时表

一般出现于排序, 分组和多表 join 的情况

查询效率不高

建议优化


using where 

使用where过滤



文章转载自董源龙,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论