当前位置:网站首页>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语句。
边栏推荐
猜你喜欢
随机推荐
笔记。。。。
codeforces每日5题(均1600)-第二十七天
network basic learning
MySQL查询进阶——从函数到表连接的使用你还记得吗
YOLOv7-Pose尝鲜,基于YOLOv7的关键点模型测评
报告:想学AI的学生数量已涨200%,老师都不够用了
Analysis of High Availability Solution Based on MySql, Redis, Mq, ES
力扣每日一题-第44天-290. 单词规律
GBase 8s 锁分类
pytest interface automation testing framework | pass in parameter values in the form of function return values
Shell executes SQL to send emails
【面试:并发篇39:多线程:线程池】ThreadPoolExecutor类-提交、停止
scrapy爬虫框架的使用
热修复技术可谓是百花齐放
leetcode-6134: Find the closest node to the given two nodes
BGP综合实验
微服务:事务管理
Pytest | skip module interface test automation framework
云原生FAQ
Idea common plugins









