当前位置:网站首页>Explain / Desc 执行计划分析
Explain / Desc 执行计划分析
2022-08-01 09:23:00 【棒棒吃不胖】
简单说明
在MySQL中,explain和desc都可以生成优化器关于SQL执行的信息,因此无论用哪一个,结果都是一样的,本文只用desc进行说明。
下面是一条查询语句以及对应的SQL执行计划:


由图可知,该SQL执行计划展示了12个元素信息。
id
第一个是id,表示select语句操作表的执行顺序。
其中id的值越大,表示优先级越高。
当id相同时,一般从上至下的顺序执行,但具体由优化器决定。
当id不同时,可能出现嵌套的子查询,子查询优先级更高,先执行。
select_type
第二个是select_type,区分不同的查询类型,包括SIMPLE、PRIMARY、SUBQUERY 、DERIVED、UNION、UNION RESULT。
SIMPLE--最简单的查询,不包括子查询和交并集。
PRIMARY--包含子部分,最外层的就是PRIMARY。
SUBQUERY-- select 或 where 包含子查询
DERIVED-- from 后的子查询; 若UNION在from后面,最外层的是DERIVED
UNION-- union后面的select语句是UNION
table
第三个表示的是表名。
也可能是临时表、表的别名。
partitions
第四个表示查询表的分区信息。
如果没有分区,就是 null
有分区,则显示分区情况
type
第五个显示查询的类型,体现了性能的差异。
SQL优化的性能从好到坏依次如下:
system > const > eq_ref > ref > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
1)system:表内只有一行记录,数据量很少,不需要磁盘IO
2)const:查询时命中主键或命中唯一索引或命中一个常量值。该最多一个匹配行。
3)eq_ref:与const用法一样。区别在于eq_ref用于联表查询(组成的一行)。
4)ref:与eq_ref相比,可以使用非唯一索引,会返回多行查询结果。
5)ref_or_null:与ref相比,查询结果返回包含null的值。
6)index_merge:索引合并优化,查询时使用两个以上的索引。
7)unique_subquery:替换IN子查询,子查询返回不重复的值。
8)index_subquery:区别于unique_subquery,用于非唯一索引,能返回重复值。
9)range:针对索引字段,查询给定范围的行。一般是where后跟的bettween...and、<、>、<=、in 等条件查询
10)index:遍历索引树,全表扫描。
11)all:从硬盘中读取,全表扫描。
possible_keys
第六个表示该字段所含的所有索引都会被列出来,但最终不一定会走这些索引。
key
第七个表示实际使用的索引。
key_len
第八个表示查询使用的索引长度(单位是字节),越短性能越好。
只计算 where 条件列的索引长度,排序和分组语句的索引不会计算在内。
ref
第九个表示索引被使用的列。
当使用常量等值查询,显示const,
当关联查询时,会显示相应关联表的关联字段
如果查询条件使用了表达式、函数,或者条件列发生内部隐式转换,可能显示为func
其他情况则显示 null
rows
第十个表示,系统估算查找到所需结果应读取的行数。
该值越小,性能越好。
filtered
第十一个表示,表中满足条件的记录数据所占百分比。
Extra
第十二个表示不能在前十一个列显示的其他信息。
1)Using index:使用了覆盖索引。
2)Using where:查询未走索引,通过where条件匹配相应的结果集。
3)Using temporary:查询的结果用临时表存储,一般是排序或分组。
4)Using filesort:无法用索引完成排序操作,ORDER BY字段没有索引,需要优化。
5)Impossible where:由于不正确的where语句,找不到所需的结果。
6)No tables used:没有from语句。
边栏推荐
猜你喜欢
随机推荐
HoloView--live data
正则表达式符号
Prime Ring Problem
Ogg synchronizes oracle to mysql, there may be characters that need to be escaped in the field, how to configure escape?
【Untitled】
ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API
zip package all files in the directory (including hidden files/folders)
codeforces每日5题(均1600)-第二十七天
[Tear AHB-APB Bridge by hand]~ Why aren't the lower two bits of the AHB address bus used to represent the address?
指针的介绍及应用
leetcode 42. 接雨水
【杭电多校第四场 B题】最短路图+缩点dp
Redis 3.2.3 crashed by signal: 11 服务宕机问题排查
[Dataset] Dataset summary of various insulators, bird's nests and anti-vibration hammers
【STM32】入门(二):跑马灯-GPIO端口输出控制
Pod environment variables and initContainer
网络个各种协议
The soul asks: How does MySQL solve phantom reads?
179. 最大数
【STM32】入门(一):环境搭建、编译、下载、运行








