当前位置:网站首页>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语句。
边栏推荐
- 获取页面数据的方法
- leetcode 42. 接雨水
- 2022.7.31-----leetcode.1161
- 淘宝商品详情又见淘宝详情,升级高级版 API
- Mysql database deployment and initialization steps
- 22牛客多校1 I. Chiitoitsu (概率dp)
- Do I need to introduce any dependencies to write data to clickhouse using flinksql?
- 笔记。。。。
- 【Untitled】
- Microsoft Azure & NVIDIA IoT developers season I | Azure IoT & NVIDIA Jetson development foundation
猜你喜欢

网络基础学习

力扣周赛304 6135. 图中的最长环 内向基环树

三子棋(C语言实现)

自定义IP在PCIE中使用

leetcode-6132:使数组中所有元素都等于零

《时代》杂志:元宇宙时代将改变世界
![[Tear AHB-APB Bridge by hand]~ Why aren't the lower two bits of the AHB address bus used to represent the address?](/img/fb/c95c5857024db001638cd484c5e78f.png)
[Tear AHB-APB Bridge by hand]~ Why aren't the lower two bits of the AHB address bus used to represent the address?

会议OA(待开会议&所有会议)

基于MySql,Redis,Mq,ES的高可用方案解析

Microsoft Azure & NVIDIA IoT 开发者季 I|Azure IoT & NVIDIA Jetson 开发基础
随机推荐
2022.7.31-----leetcode.1161
Get the Token from the revised version of Qubutu Bed
MySQL查询进阶——从函数到表连接的使用你还记得吗
Intensive reading of ACmix papers, and analysis of its model structure
Gethostbyname \ getaddrinfo DNS domain name IP address is not safe
scrapy爬虫框架的使用
sql server, FULL模式, dbcc shrinkfile(2,1) 不能收缩事务日志,还是原来的大小,是为什么?
Data Analysis 5
STM32个人笔记-程序跑飞
mysql查看cpu使用情况
USB Protocol (2) Terminology
leetcode-6133:分组的最大数量
pytest interface automation testing framework | pass in parameter values in the form of function return values
灵魂发问:MySQL是如何解决幻读的?
会议OA(待开会议&所有会议)
leetcode-6132: Make all elements in array equal to zero
安装GBase 8c数据库的时候,报错显示“Resource,如何解决?
Is the real database data of TiDB stored in kv and pd?
network basic learning
淘宝商品详情又见淘宝详情,升级高级版 API