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