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 子句中的其他条件去过滤这些数据行