explain分析sql

mysql中可以使用explain命令来解析查询语句的性能,只需要在查询语句之前加上 explain 关键字即可。

接下来分别对结果中的每一个字段进行解析。

1)select_type  select查询的类型

SIMPLE  表示此查询是一个不包含union和子查询的简单查询。

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

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

SUBQUERY  子查询的第一个select

2)table  查询的是哪个表

3)type 

该字段是判断查询是否高效的重要依据。通过type的类型,可以得知该查询是全表扫描还是索引扫描。

type的常用类型

system  表中只有一条数据,这个类型是特殊的const类型。

const  针对主键或唯一索引的等值查询扫描,最多只返回一行数据。const查询速度非常快,因为它仅仅读取一次即可。

eq_ref  此类型通常出现在多表的join查询,表示对于前表的每一个结果,都只能匹配到后表的一行结果,并且查询的比较操作通常是=,查询效率较高。

ref  此类型通常出现在join查询,针对非唯一或非主键索引,或者是使用了最左前缀规则索引的查询。

range  表示使用索引范围查询,通过索引字段范围获取表中部分数据记录。这个类型通常出现在=,>=,<=,between,in等操作中。

index  表示全索引扫描,仅仅扫描所有的索引就可以获取结果,而不用扫描数据。当这种情况时,extra字段会显示 using index。

ALL  表示全表扫描,这个类型的查询是性能最差的查询之一。通常来说,我们的查询不应该出现ALL类型的,因为这样在大数据量的情况下,对数据库的性能是巨大的灾难。

4)possible_keys  此次查询中可能选用的索引

5)key  此次查询中确切使用到的索引

6)ref  哪个字段或常数与key一起被使用

7)rows  显示此查询一共扫描了多少行,这是一个估计值

8)filtered  表示此查询条件所过滤的数据的百分比

9)extra  额外的信息

posted @ 2019-09-09 19:43  江湖凶险  阅读(374)  评论(0编辑  收藏  举报