阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL执行计划分析

369次阅读
没有评论

共计 2098 个字符,预计需要花费 6 分钟才能阅读完成。

一. 执行计划能告诉我们什么?

  • SQL 如何使用索引
  • 联接查询的执行顺序
  • 查询扫描的数据函数

二. 执行计划中的内容

MySQL 执行计划分析

SQL 执行计划的输出可能为多行,每一行代表对一个数据库对象的操作

1. ID 列

  • ID 列中的如果数据为一组数字,表示执行 SELECT 语句的顺序;如果为 NULL,则说明这一行数据是由另外两个 SQL 语句进行 UNION 操作后产生的结果集
  • ID 值相同时,说明 SQL 执行顺序是按照显示的从上至下执行的
  • ID 值不同时,ID 值越大代表优先级越高,则越先被执行

演示

MySQL 执行计划分析

可以看到上面的执行计划返回了 3 行结果,id 列的值可以看作是 SQL 中所具有的 SELECT 操作的序号
由于上述 SQL 中只有一个 SELECT,所以 id 全为 1,因此,我们就要按照由上至下读取执行计划
按照我们的 SQL 语句,我们会认为执行顺序是 a,b,c, 但是通过上图可以发现,MySQL 并不是完成按照 SQL 中所写的顺序来进行表的关联操作的
执行对表的执行顺序为 a,c,b,这是由于 MySQL 优化器会根据表中的索引的统计信息来调整表关联的实际顺序

2. SELECT_TYPE 列

含义
SIMPLE 不包含子查询或是 UNION 操作的查询
PRIMARY 查询中如果包含任何子查询,那么最外层的查询则被标记为 PRIMARY
SUBQUERY SELECT 列表中的子查询
DEPENDENT SUBQUERY 依赖外部结果的子查询
UNION Union 操作的第二个或是之后的查询的值为 union
DEPENDENT UNION 当 UNION 作为子查询时,第二或是第二个后的查询的 select_type 值
UNION RESULT UNION 产生的结果集
DERIVED 出现在 FROM 子句中的子查询

3. TABLE 列

包含以下几种结果:

输出去数据行所在表的名称,如果表取了别名,则显示的是别名
<union M,N>:由 ID 为 M,N 查询 union 产生的结果集
<derived N>/<subquery N>:由 ID 为 N 的查询产生的结果

4. PARTITIONS 列:

查询匹配的记录来自哪一个分区
对于分区表,显示查询的分区 ID
对于非分区表,显示为NULL

5. TYPE 列

按性能从高至低排列如下:

含义
system 这是 const 联接类型的一个特例,当查询的表只有一行时使用
const 表中有且只有一个匹配的行时使用,如对主键或是唯一索引的查询,这是效率最高的联接方式
eq_ref 唯一索引或主键索引查询,对应每个索引键,表中只有一条记录与之匹配
ref 非唯一索引查找,返回匹配某个单独值的所有行
ref_or_null 类似于 ref 类型的查询,但是附加了对 NULL 值列的查询
index_merge 该联接类型表示使用了索引合并优化方法
range 索引范围扫描,常见于 between、>、< 这样的查询条件
index FULL index Scan 全索引扫描,同 ALL 的区别是,遍历的是索引树
ALL FULL TABLE Scan 全表扫描,这是效率最差的联接方式

6. Extra 列

包含 MySQL 如何执行查询的附加信息

含义
Distinct 优化 distinct 操作,在找到第一个匹配的元素后即停止查找
Not exists 使用 not exists 来优化查询
Using filesort 使用额外操作进行排序,通常会出现在 order by 或 group by 查询中
Using index 使用了覆盖索引进行查询
Using temporary MySQL 需要使用临时表来处理查询,常见于排序,子查询,和分组查询
Using where 需要在 MySQL 服务器层使用 WHERE 条件来过滤数据
select tables optimized away 直接通过索引来获得数据,不用访问表,这种情况通常效率是最高的

7. POSSIBLE_KEYS 列

  • 指出 MySQL 能使用哪些索引来优化查询
  • 查询列所涉及到的列上的索引都会被列出,但不一定会被使用

8. KEY 列

  • 查询优化器优化查询实际所使用的索引
  • 如果表中没有可用的索引,则显示为 NULL
  • 如果查询使用了覆盖索引,则该索引仅出现在 Key 列中

9. KEY_LEN 列

显示 MySQL 索引所使用的字节数,在联合索引中如果有 3 列,假如 3 列字段总长度为 100 个字节,Key_len 显示的可能会小于 100 字节,比如 30 字节,这就说明在查询过程中没有使用到联合索引的所有列,只是利用到了前面的一列或 2 列

  • 表示索引字段的最大可能长度
  • Key_len 的长度由字段定义计算而来,并非数据的实际长度

10. Ref 列

  • 表示当前表在利用 Key 列记录中的索引进行查询时所用到的列或常量

11. rows 列

  • 表示 MySQL 通过索引的统计信息,估算出来的所需读取的行数(关联查询时,显示的是每次嵌套查询时所需要的行数)
  • Rows 值的大小是个统计抽样结果,并不十分准确

12. Filtered 列

  • 表示返回结果的行数占需读取行数的百分比
  • Filtered 列的值越大越好(值越大,表明实际读取的行数与所需要返回的行数越接近)
  • Filtered 列的值依赖统计信息,所以同样也不是十分准确,只是一个参考值

三. 执行计划的限制

  • 无法展示存储过程,触发器,UDF 对查询的影响
  • 无法使用 EXPLAIN 对存储过程进行分析
  • 早期版本的 MySQL 只支持对 SELECT 语句进行分析

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2098字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7803882
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
这个开源软件130k的star数!让电脑轻松管理安卓手机的神器

这个开源软件130k的star数!让电脑轻松管理安卓手机的神器

这个开源软件 130k 的 star 数!让电脑轻松管理安卓手机的神器 大家好,我是星哥。今天给大家安利一款宝...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...