mysql 中的 explain 关键字

在MySQL中使用explain关键字可以模拟查看数据库是如何来执行SQL查询语句,也就是常说的查看一条SQL语句在数据库中的执行计划,如下图所示

此图就是执行 EXPLAIN SELECT * FROM  test.test 后返回的SELECT * FROM  test.test查询的执行计划

查询结果返回的字段说明如表所示 

表查询结果返回的字段说明

字段

说明

id

查询的顺序编号,表示查询中执行的顺序,id的值越大执行的优先级越高,如果id相同,则从上往下执行

select_type

查询类型,常见查询类型如下:

SIMPLE:表示简单查询方式,SQL语句中一般不会不使用UNION和子查询等

PRIMARY:表示当查询中包含子查询时,最外层的查询语句则被标记为primary 。

UNION:查询语句中如果在UNION关键字之后出现了第二个SELECT,则被标记为UNION。

UNION RESULT:表示查询中有多个查询结果集做UNION操作。

DEPENDENT UNION:表示子查询中存在UNION操作时,从UNION之后的第二个及之后的SELECT语句都是DEPENDENT UNION。

DEPENDENT SUBQUERY:子查询中UNION 中第一个SELECT查询为DEPENDENT SUBQUERY。

SUBQUERY:子查询内层查询的第一个SELECT。

DERIVED:查询语句中如果from子句的子查询中出现了union关键字则外层select查询将被标记为DERIVED。

MATERIALIZED:表示子查询被物化。

UNCACHEABLE SUBQUERY:表示查询结果集无法缓存的子查询,需要逐次查询。

UNCACHEABLE UNION:表示子查询不可被物化,需要逐次运行

Table

查询涉及的表名或者表的别名

本文作者:张永清, 转载请注明: https://www.cnblogs.com/laoqing/p/16880718.html  来源于博客园 ,本文摘选自《软件性能测试分析与调优实践之路》

Type

表示表连接的类型,包括的类型如下所示,如下的这些类型的性能从高到低的顺序是:null→system→const→eq-ref→ref→fulltext→ref_or_null→index_merge→unique_subquery→index_subquery→range→index→ALL

null:表示不访问任何的表

system:表示表中只有一条记录,相当于系统表,一般可以认为是const类型的特例。

const:表示主键或者唯一索引的常量查询,表中最多只有1行记录符合查询要求,通常const使用到主键或者唯一索引进行定值查询、常量查询,查询的速度非常快。

eq_ref:表示join 查询过程中,关联条件字段走主键或者唯一索引,出来的行数不止一行。eq_ref是一种查询性能很高的 join 操作。

ref:表示非聚集索引的常量查询

fulltext:表示查询的过程中,使用到了 fulltext 索引。

ref_or_null:跟ref查询类似,在ref的查询基础上会多家一个null值的条件查询

index merg:表示索引联合查询,

unique subquery:表示查询走主键的子查询

index subquery:表示查询走非聚集索引的子查询

range:表示查询走索引范围的查询,一般包括:=、<>、>、>=、<、<=、IS NULL、BETWEEN、IN、<=> 等范围。

index:表示通过索引做扫描查询。

All:表示全表扫描,性能最差

possible_keys

查询时预计可能会使用的索引,这里说的索引只是可能会用到,实际查询不一定会用到。

Key

实际查询时真实使用的索引

key_len

使用的索引长度

Ref

关联信息

Rows

查询时扫描的数据记录行数

Extra

表示查询特性的使用情况,常用的查询特性如下所示。

Using index:表示使用了索引

Using index conditio:表示使用了索引做过滤

Using MRR:表示使用了索引做内部排序

Using where:表示使用了where条件

Using temporary:表示使用了临时表。

Using filesort:表示使用文件排序,一般指无法利用索引来完成的排序

 

 

 

转载自张永清: https://www.cnblogs.com/laoqing/p/16880718.html

 

 

posted on 2022-11-12 10:03  法哈席基  阅读(44)  评论(0编辑  收藏  举报