当前位置:网站首页>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语句。
边栏推荐
- How to get page data
- Parsing MySQL Databases: "SQL Optimization" vs. "Index Optimization"
- Microsoft Azure & NVIDIA IoT 开发者季 I|Azure IoT & NVIDIA Jetson 开发基础
- Classify GBase 8 s lock
- Manual upgrade and optimization tutorial of Lsky Pro Enterprise Edition
- How to query database configuration parameters in GBase 8c, such as datestyle
- MySQL查询进阶——从函数到表连接的使用你还记得吗
- Leicester Weekly 304 6135. The longest ring in the picture Inward base ring tree
- 静态Pod、Pod创建流程、容器资源限制
- 用OpenCV的边缘检测
猜你喜欢

HoloView -- Tabular Datasets

18张图,直观理解神经网络、流形和拓扑

网络基础学习

codeforces每日5题(均1600)-第二十七天

USB Protocol (2) Terminology

【应用推荐】常见资源管理器整理,含个人使用体验和产品选型推荐

opencv创建窗口—cv.namedWindow()
![[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?

企业数据虚拟化综合指南

解析MySQL数据库:“SQL优化”与“索引优化”
随机推荐
Microsoft Azure & NVIDIA IoT developers season I | Azure IoT & NVIDIA Jetson development foundation
How to get page data
Intensive reading of ACmix papers, and analysis of its model structure
[Beyond programming] When the fig leaf is lifted, when people begin to accept everything
Gethostbyname \ getaddrinfo DNS domain name IP address is not safe
Redis学习
HoloView -- Tabular Datasets
leetcode 42. Catch the rain
BGP综合实验
18张图,直观理解神经网络、流形和拓扑
Mysql database deployment and initialization steps
opencv创建窗口—cv.namedWindow()
安装GBase 8c数据库的时候,报错显示“Resource,如何解决?
Data Analysis 5
【STM32】入门(二):跑马灯-GPIO端口输出控制
Install GBase 8 c database, the error shows "Resource, how to solve?
自定义IP在PCIE中使用
Prime Ring Problem
sqlserver怎么查询一张表中同人员的交叉日期
net stop/start mysql80 拒绝访问