【MySQL】使用explain对SQL进行性能测试

explain使用

explain是查看sql的执行效果的。在测试sq性能事,在sql语句前加explain就可以看到执行效果了

使用示例

explain select distinct phonetic
from tn_phonetic_record
where user_id='1071989232293273602'
and is_check=0

执行结果

在这里插入图片描述

explain中的type

type表示的是访问类型,就是mysql找到需要的数据行的方式
type结果值排序,从好到坏
const>ref_eq>ref>range>index>all
一般查询达到range级别比较好,最好能到达ref,不然会出现性能问题
这里只描述了些常见的

(1)all

对数据库进行了全表扫描,这种类型是最差的

(2)index

有序的进行了全表扫描,扫描顺序是按照索引的顺序,仅仅只有索引被扫描

(3)range

range指的是有范围的索引扫描,相对于index的全索引扫描,它有范围限制,因此要优于index

(4)ref

普通索引查找,找到第一条后继续找
基于索引扫描,对外表的一条元组,内表可有若干条元组与之对应

(5)eq_ref

索引查找,找到第一条后不找了
基于索引扫描,对外表的一条元组,内表只有唯一一条元组与之对应

(6)const

根据主键或唯一索引,只取出确定的一行数据

explain中的Extra

Extra是额外信息说明
这里只描述了些常见的

(1)Using index

仅使用索引树中的信息从表中检索列信息,而不需要进行附加搜索来读取实际行,这发生在对表 的全部的请求列都是同一个索引的部分的时候,即使用了覆盖索引

(2)Using temporary

表示mysql对查询结果进行排序的时候使用了一张临时表。
由于排序没有走索引,使用union、子查询连接查询、使用某些视图等原因,创建了一个内部临时表(这里的临时表可能是内存上的临时表)

(3)Using where

表示进行过滤,过滤条件字段无索引。它代表是服务器在存储引擎收到行后将进行过滤。
where中的条件会有属于索引的列,当它读取使用索引的时候,就会被过滤,这时在Extra就不会出现usingwhere这么一个说明

(4)Using filesort

表示mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。
MySQL需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行

(5)Using index condition

会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行

原创文章 255 获赞 116 访问量 19万+

猜你喜欢

转载自blog.csdn.net/cxh6863/article/details/103324525