当前位置: 首页 > news >正文

精通MySQL之Explain执行计划

目录

1 Explain意义

2 Explain用法

3 Explain分析字段


以下示例基于Mysql8.0版本

1 Explain意义

当数据库执行一条SQL语句返回结果,而我们需要知道数据库执行SQL语句时做了哪些操作就需要用到Explain指令。英文意思是解析,解释。

2 Explain用法

EXPLATN + 某条需要分析的sql语句

例:

3 Explain分析字段

字段属性解释

id

执行顺序id

数字

sql语句执行顺序,sql需要被分步执行时,数据库执行的顺序

id越大越先被解析执行,id相同时,从上往下解析执行

select_type

查询类型

SIMPLE

简单查询

简单的select查询,查询中不包含子查询或者union

PRIMARY

主查询

查询中包含任何复杂的子部分,最外层查询则被标记为primary

SUBQUERY

子查询

在select 或 where列表中包含了子查询

DERIVED

派生查询

在from列表中包含的子查询被标记为derived(衍生),外层查询会从这个派生查询的结果集(临时表)中查询数据

UNION

联合查询

若第二个select出现在union之后,则被标记为union;若union包含在from子句的子查询中,外层select将被标记为derived

UNION RESULT

联合结果集查询

从union表获取结果的查询
table表名被查询的表
partitions分区

操作的分区

mysql的表当数据量很大时可以分区存储。

分区的类型又分

1. Range partition(范围分区)

2. List partition(列表分区)

3. Hash partition(哈希分区)

4. Key partition(键值分区)

分区表相关博客

MySQL分区表详解_V1ncent Chen的博客-CSDN博客_mysql分区表

type

system

表只有一行记录(等于系统表),这是const类型的特列,平时不会出现,可以忽略不计

查找性能从上到下越来越差

我认为它于select_type的区别是,select_type代表我查了哪里,type表示我怎么查了它,前者为where后者为how。

性能从上到下越来越差

const表示通过索引一次就找到了,const用于比较primary key 或者unique索引。因为只匹配一行数据,所以很快。如将主键置于where列表中,MySQL就能将该查询转换为一个常量。
eq_ref唯一性索引扫描,一条索引匹配一条记录
ref非唯一性索引扫描,一条索引匹配多条记录
range对索引进行了范围扫描
index对所有索引进行查找
all对所有数据进行查找,常说的全表查询
possible_keys可能用到的索引查询具体字段时,此字段上设置的索引,但并不一定使用,或者无法使用。
key实际上用到的索引查询时,用到的索引
key_len索引所占字节数索引中使用的字节数,可通过该列计算查询中使用的索引的长度,索引所占的字节数越少越好
ref

引用列名

引用字段

表a和表b联合查询时,如果a表中的索引列被用于b表的查询的条件, 那么a表的索引列名会被显示到ref中(自己的理解)
row查询行数根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数
filtered过滤百分比比如通过某种type方式查询出100条数据,实际需要的数据只有70条,那么百分比为70%。因此一般情况这个值越大越好。但不是sql优化的唯一参考。

Extra

Using filesort对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作称为“文件排序”十分重要的额外信息
Using temporary使用了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by
Using index表明相应操作使用了“覆盖索引”,所需查找的数据就在索引的叶子节点上。不需要访问表的数据行。因此在select查询字段时,如果查询的字段里有个别字段没有被索引覆盖,数据库就不会使用Using index,则需要读取整个行
Using where使用了where过滤
Using join buffer代表多表join时,生成了join缓冲区。
impossible where代表不可能的条件查询。比如where a=1 and a=2
select tables optimized away代表在没有GROUPBY子句的情况下,基于索引优化了MIN/MAX操作,或者对于MyISAM存储引擎优化了COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。
distinct优化了distinct操作,在找到第一匹配的元组后即停止找同样值的动作

相关文章:

  • Docker学习
  • Kubernetes—k8s中Service实例出现污点
  • Chapter4.2:线性系统的根轨迹法
  • kvm快照和克隆
  • 【元胞自动机】基于元胞自动机模拟晶体生长附matlab代码
  • Unity-- Gfx.WaitForPresentOnGfxThread占用CPU过高导致帧率低
  • opencv--GrabCut
  • IT计算机企业如何使用科技虚拟员工规避人工操作风险
  • 【Android】-- 数据存储(一)(共享参数SharePreferences、数据库SQLite)
  • 文件包含漏洞——实例
  • Nacos详解
  • 洛谷刷题(普及-):谁拿了最多奖学金、ISBN 号码、开心的金明、数列、多项式输出
  • SpringMVC(二)
  • 操作系统第九讲——线程的实现方式和多线程模型
  • 爬虫——第一次笔记 urllib的基本使用 urllib一个类型,六个方法 urllib下载 urllib请求对象的定制
  • Google 是如何开发 Web 框架的
  • android 一些 utils
  •  D - 粉碎叛乱F - 其他起义
  • httpie使用详解
  • js 实现textarea输入字数提示
  • JS函数式编程 数组部分风格 ES6版
  • k8s 面向应用开发者的基础命令
  • Laravel Telescope:优雅的应用调试工具
  • Rancher-k8s加速安装文档
  • STAR法则
  • Terraform入门 - 3. 变更基础设施
  • Vim Clutch | 面向脚踏板编程……
  • 全栈开发——Linux
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 函数计算新功能-----支持C#函数
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ![CDATA[ ]] 是什么东东
  • #include<初见C语言之指针(5)>
  • #QT(TCP网络编程-服务端)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $refs 、$nextTic、动态组件、name的使用
  • (¥1011)-(一千零一拾一元整)输出
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (已解决)什么是vue导航守卫
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)大型网站的系统架构
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .Net Remoting常用部署结构
  • .sh 的运行
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用
  • [C++]四种方式求解最大子序列求和问题
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [CCIE历程]CCIE # 20604