1、什么是Explain Analyze?

Explain 是我们常用的查询分析工具,可以对查询语句的执行方式进行评估(并非实际的执行情况,可能与实际情况存在较大差距),给出很多有用的线索。

Explain Analyze 是 MySQL 8 中提供的查询性能分析工具,牛X之处在于可以给出实际执行情况,可以详细的显示出查询语句执行过程中,每一步花费了多少时间。

Explain Analyze 会做出查询计划,并且会实际执行,以测量出查询计划中各个关键点的实际指标,例如耗时、条数,最后详细的打印出来。

2、EXPLAIN的语法
EXPLAIN [ ANALYZE ] [ VERBOSE ] statement
参数解释:
    ANALYZE:执行命令并显示实际运行时间。
    VERBOSE:显示规划树完整的内部表现形式,而不仅是一个摘要。通常,这个选项只是在特殊的调试过程中有用。VERBOSE输出是否打印工整的,具体取决于配置参数 explain_pretty_print 的值。
    statement:查询执行计划的 SQL 语句,可以是任何select、insert、update、delete、values、execute、declare 语句。

3、EXPLAIN和EXPLAIN ANALYZE区别

(1)、EXPLAIN展示查询优化器对该查询计划估计的代价,但是不执行该查询。

例如:EXPLAIN SELECT * FROM test WHERE id=2;

(2)、EXPLAIN ANALYZE不仅会显示查询计划,还会实际运行语句。

EXPLAIN ANALYZE会丢掉任何来自SELECT语句的输出,但是该语句中的其他操作会被执行(例如INSERT、UPDATE或者DELETE)。

要在DML语句上使用EXPLAIN ANALYZE却不让该命令影响数据,可以明确地把EXPLAIN ANALYZE用在一个事务中:
(BEGIN; EXPLAIN ANALYZE ...; ROLLBACK;)。

EXPLAIN ANALYZE运行语句后除了显示计划外,还有下列额外的信息:
1、运行该查询消耗的总时间(以毫秒计) 计划节点操作中涉及的工作者(Segment)数量
2、操作中产生最多行的Segment返回的最大行数(及其Segment ID) 操作所使用的内存
3、从产生最多行的Segment中检索到第一行所需的时间(以毫秒计),以及从该Segment中检索所有行花费的总时间。

例如:EXPLAIN ANALYZE SELECT * FROM test WHERE id=2;

4、阅读EXPLAIN 输出
查询计划类似于一棵有节点的树,执行和阅读的顺序是自底而上。计划中的每个节点表示一个操作,例如表扫描、表连接、聚集或者排序。阅读的顺序是从底向上:每个节点会把结果输出给直接在它上面的节点。一个计划中的底层节点通常是表扫描操作:顺序扫描表、通过索引或者位图索引扫描表等。如果该查询要求那些行上的连接、聚集、排序或者其他操作,就会有额外的节点在扫描节点上面负责执行这些操作。最顶层的计划节点通常是数据库的移动(MOTION)节点:重分布(REDISTRIBUTE)、广播(BROADCAST)或者收集(GATHER)节点。这些操作在查询处理时在实例节点之间移动数据。

EXPLAIN的输出对于查询计划中的每个节点都显示为一行并显示该节点类型和下面的执行的代价估计:
cost:以磁盘页面获取为单位度量。1.0等于一次顺序磁盘页面读取。第一个估计是得到第一行的启动代价,第二个估计是得到所有行的总代价。
rows:这个计划节点输出的总行数。这个数字根据条件的过滤因子会小于被该计划节点处理或者扫描的行数。最顶层节点的是估算的返回、更新或者删除的行数。
width: 这个计划节点输出的所有行的总字节数。

需要注意以下两点:
一个节点的代价包括其子节点的代价。最顶层计划节点有对于该计划估计的总执行代价。这是优化器估算出来的最小的数字。
代价只反映了在数据库中执行的时间,并没有计算在数据库执行之外的时间,例如将结果行传送到客户端花费的时间。
rows:根据统计信息估计SQL返回结果集的行数
width:返回的结果集的每一行的长度,这个长度值是根据pg_statistic表中的统计信息来计算的。

MySQL8 查询优化新工具 Explain Analyze的更多相关文章

  1. pg_flame postgresql EXPLAIN ANALYZE 火焰图工具

    pg_flame 是golang 编写的一个将pg的EXPLAIN ANALYZE 转换为火焰图,使用简单 以下是一个简单的demo 环境准备 docker-compose 文件   version: ...

  2. Mysql8.0新特性【详细版本】

    1.  账户与安全 用户创建与授权 之前:创建用户并授权 1 grant all privileges on *.* to 'myuser'@'%' identified by '3edc#EDC'; ...

  3. 郑晔谈 Java 开发:新工具、新框架、新思维【转载】【整理】

    原文地址 导语:"我很惊讶地发现,现在许多程序员讨论的内容几乎和我十多年前刚开始做 Java 时几乎完全一样.要知道,我们生存的这个行业号称是变化飞快的.其实,这十几年时间,在开发领域已经有 ...

  4. bowtie:短序列比对的新工具

    bowtie:短序列比对的新工具(转) (2014-11-17 22:15:24) 转载▼ 标签: 转载   原文地址:bowtie:短序列比对的新工具(转)作者:玉琪星兆 Bowtie是一个超级快速 ...

  5. 资源 | TensorFlow推出新工具Seedbank:即刻使用的预训练模型库【转】

    本文转载自:http://tech.ifeng.com/a/20180713/45062331_0.shtml 选自TensorFlow 作者:Michael Tyka 机器之心编译 参与:路.王淑婷 ...

  6. JavaScript代码优化新工具UglifyJS

    jQuery 1.5 发布的时候 john resig 大神说所用的代码优化程序从Google Closure切换到UglifyJS,新工具的压缩效果非常令人满意. UglifyJS 是一个服务端no ...

  7. (转载)详解7.0带来的新工具类:DiffUtil

    [Android]详解7.0带来的新工具类:DiffUtil 标签: diffutil 2017-04-17 18:21 226人阅读 评论(0) 收藏 举报  分类: Android学习笔记(94) ...

  8. 谷歌推出备份新工具:Google Drive将同步计算机文件

    Google 正在将云端硬盘 Drive 转变成更强大的文件备份工具.很快,Google Drive 将能监测并备份你电脑上的(几乎)所有文件,只要是你勾选的文档,Drive 就能同步至云端. 具体来 ...

  9. 新工具Scapy

    新工具 Scapy 1.环境: 命令: pip install scapy 启动终端: 看这花里胡哨的界面那就成功啦! 注意上图中的INFO信息,如果没有安装可选包,部分功能不可用,在需要的时候单独安 ...

  10. 跨时代的MySQL8.0新特性解读

    目录 MySQL发展历程 MySQL8.0新特性 秒级加列 性能提升 文档数据库 SQL增强 共用表表达式(CTEs) 不可见索引(Invisible Indexes) 降序索引(Descending ...

随机推荐

  1. vscode prettier保存代码时自动格式化

    https://blog.csdn.net/qq_37815596/article/details/109225879

  2. java进阶(16)--System常用方法总结

    一.Systen.out静态变量 静态变量,用的最多的是调用print方法   二.System.out.println() println()其实是printStream类的方法   三.Sytem ...

  3. 图的遍历(DFS和BFS)

    声明:图片及内容基于https://www.bilibili.com/video/BV1rp4y1Q72r?from=articleDetail 图的遍历 深度优先遍历(DFS) DFS核心是递归和栈 ...

  4. 如何在 Photoshop 中制作 GIF 动画

    您可能已经使用过一些在线 gif 生成器来快速生成 gif 图像,但这些在线生成器无法提供与 Photoshop 相同的灵活性和结果. gif 就像您可以在 Photoshop 中创建的迷你动画.当你 ...

  5. 【TouchGFX】实测工程所在路径深度不可超过10级(10级有效)

    实测环境 win10 64bit touchgfx designer 4.13.0

  6. [转帖]如何修改Bash Shell的提示符的格式和配色

    https://zhuanlan.zhihu.com/p/348416919 我们大多数使用的shell提示符,显示用户名.主机名和当前所在目录.在本文将会介绍如何定制一个自己喜欢的Bash. 了解B ...

  7. [转帖]通过拓扑 label 进行副本调度

    https://docs.pingcap.com/zh/tidb/stable/schedule-replicas-by-topology-labels#%E5%9F%BA%E4%BA%8E%E6%8 ...

  8. [1036]kvm虚拟机访问时提示no route to host分析

    环境 宿主机: IP: 10.110.136.43 版本:Kylin Linux Advanced Server release V10 (Sword) KVM vm: IP: 10.110.136. ...

  9. vue中keep-alive详细讲解

    场景 今天产品跑过来跟我说, 当我在A页面修改数据后,去B页面. 然后返回A页面.希望A页面保留我修改后的数据. 而不是数据又恢复最初的样子了.我心里想,尼玛,又要加班了? 看下面小粒子 数据被被重置 ...

  10. ABP-VNext 用户权限管理系统实战05----扩展授权类型(单点登录)

    一.适合场景: 1.我方系统在集成到别人的集成本台时一般是拿别的平台的用户名,在我方系统进行登录 2.我方系统是前后端分离,前端要拿到token 二.解决方案:自定义授权类型 我们知道Identity ...