我们排查关系型数据库的SQL性能问题时,执行计划是重要的手段之一,看执行计划有很多种方法,Oracle可以参考《查询执行计划的几种方法》、《获取执行计划的方法对比》,MySQL可以参考《查看MySQL执行计划的几种方法以及格式说明》。

杨老师推送的这篇文章《explain analyze 查看执行计划》,给我们介绍了MySQL 8.0中explain analyze的相关问题。

MySQL 8.0对如何查看MySQL的执行计划做了2次改进,第一个是explain format=tree,提供树状的SQL执行过程,提供更通俗易懂的算法逻辑,到8.0.18版本有开始提供新的查看执行计划的用法,就是explain加上关键字  explain analyze,相比format=tree的方式新增加时间和循环相关统计。

纸上来得终觉浅,绝知此事要躬行。

构建测试用例两张表,并插入数据,

CREATE TABLE `x` (`id` int NOT NULL AUTO_INCREMENT,`a` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30005 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)###  x 12010 行数据CREATE TABLE `t2` (`id` int NOT NULL AUTO_INCREMENT,`a` int DEFAULT NULL,`c` int DEFAULT '1',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31186 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)### t2 10000 行数据。
查看explain format=tree

通过format=tree的方式可以查看到优化器的执行计划,标准的NL,全表扫描,因为select a.id,访问表x时使用了覆盖索引访问主键id,并没有访问a的其他字段,而t2表的字段c,用不了覆盖索引,

mysql [localhost:8031] {msandbox} (test) > explain format=tree  select a.id, b.c from  x a ,t2 b where a.id=b.id ;
+-------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                          |
+-------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=4505.00 rows=10000)-> Table scan on b  (cost=1005.00 rows=10000)-> Single-row covering index lookup on a using PRIMARY (id=b.id)  (cost=0.25 rows=1)|
+-------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

执行计划显示NL join的成本是4505 ,一次nest loop访问了10000行。这些内容不能表明查询计划实际上是在哪些操作上花费的时间。

explain analyze将执行以下操作

相比format=tree的方式和老的explain的方式,analyze的输出增加。

  1. cost表示优化器评估的成本。

  2. rows第一个rows表示估计访问的行数, 第二个rows表示真正执行的行数

  3. actual time时间actual time=0.048..7.194,前面的值是获取第一行所耗费的时间,第二个7.194是获取所有记录花费的时间。如果循环多次,loops大于1 ,则该值就是一次循环对应的平均时间。

  4. loops循环次数。本案例中最里面的loops=10000表示循环访问表a 10000次。

mysql [localhost:8031] {msandbox} (test) > explain analyze  select a.id, b.c from  x a ,t2 b where a.id=b.c ;
+-----------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
+-----------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=4505.00 rows=10000) (actual time=0.048..7.194 rows=10000 loops=1)-> Filter: (b.c is not null)  (cost=1005.00 rows=10000) (actual time=0.038..2.269 rows=10000 loops=1)-> Table scan on b  (cost=1005.00 rows=10000) (actual time=0.037..1.719 rows=10000 loops=1)-> Single-row covering index lookup on a using PRIMARY (id=b.c)  (cost=0.25 rows=1) (actual time=0.000..0.000 rows=1 loops=10000)|
+-----------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

explain的三种用法,

检查查询计划:explain format = tree
分析查询执行:explain analyze
了解计划选择:Optimizer trace

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,

近期更新的文章:

《MySQL的审计功能实现方案》

《"--"注释在Oracle和MySQL下的区别》

《最近碰到的一些问题》

《1024的一个小福利》

《Oracle 19c对VARCHAR2的限制》

近期的热文:

《"红警"游戏开源代码带给我们的震撼》

文章分类和索引:

《公众号1100篇文章分类和索引》

MySQL的explain analyze增强功能相关推荐

  1. MySQL EXPLAIN ANALYZE

    本文转载自"MySQL解决方案工程师"公众号,由 徐轶韬翻译 作者:Norvald H. Ryeng  译:徐轶韬 MySQL8.0.18刚刚发布,它包含一个全新的功能EXPLAI ...

  2. 根据条件查询某条记录的条数_「性能与架构」MySQL 8 查询优化新工具 Explain Analyze...

    来源:性能与架构公众号 1. Explain Analyze 介绍 Explain 是我们常用的查询分析工具,可以对查询语句的执行方式进行评估,给出很多有用的线索. 但他仅仅是评估,不是实际的执行情况 ...

  3. mysql按照列构建索引_列存储索引增强功能–在线和离线(重新)构建

    mysql按照列构建索引 In this article, we will explore ' Clustered columnstore online index build and rebuild ...

  4. 数据库索引统计信息不一致_列存储索引增强功能–克隆数据库中的索引统计信息更新

    数据库索引统计信息不一致 SQL Server was launched in 1993 on WinNT and it completed its 25-year anniversary recen ...

  5. mysql的explain怎么看_mysql中explain用法详解

    如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1 ...

  6. PostgreSQL 12:新功能和增强功能

    目录 介绍 新功能和增强功能 CTE增强 生成列 重新索引改进 默认情况下启用JIT编译 查询并行性改进 PL/pgSQL增强 SQL / JSON路径查询 分区改进 拼写改进 MCV统计信息现在支持 ...

  7. SQL截断增强功能:SQL Server 2019中的静默数据截断

    In this article, we'll take a look into SQL truncate improvement in SQL Server 2019. 在本文中,我们将研究SQL S ...

  8. 行存储索引改换成列存储索引_列存储索引增强功能–数据压缩,估计和节省

    行存储索引改换成列存储索引 Data compression is required to reduce database storage size as well as improving perf ...

  9. php mysql留言板系统_PHP结合Mysql数据库实现留言板功能

    先给大家展示下留言板效果图: 最近看了下PHP基础语法,就想利用这些基本东西实现留言板,也是对基础知识的一个巩固. 什么是留言板?一种可以用来记录,展示文字信息的载体. 现切入正题,说说本次留言板是怎 ...

最新文章

  1. 信息系统项目管理师项目变更管理
  2. 《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一1.6 正确度量...
  3. 【多线程学习笔记】sychronized关键字底层原理、sychronized与ReentrantLock、volatile和synchronized
  4. 李航书上隐马尔科夫模型案例的实验结果复现
  5. [html] 如何给页面添加追加右键菜单(原右键菜单功能保持不变)
  6. 苹果忘记开机密码_苹果电脑忘记开机密码快速恢复的方法!
  7. git菜单形式的_添加“Git Bash Here”到右键菜单
  8. 美团暑期日常实习前端面试
  9. 数据挖掘十大算法-决策树的实现
  10. prism.js让页面代码变漂亮
  11. 大整数的代数运算_高等代数教学笔记2:多项式I
  12. Python + OpenCv实现视频中的车辆检测计数(车流量统计) (2020.7.15已更新源码)
  13. 谷歌云盘快速下载大文件
  14. Spring AOP原理详解及实例
  15. Java的图标和由来
  16. 手机越贵,打车越贵?复旦教授三万字打车报告,实锤打车软件“大数据杀熟”
  17. python 包络线_如何简明易懂地说明数据包络线分析法(DEA)?
  18. [HNOI2015]亚瑟王 题解
  19. 阿里开放平台接入——开放平台注册与API调用
  20. 病案首页计算机管理系统功能一般不包括,病案管理系统

热门文章

  1. python编程语言汇总-最全的编程语言汇总,程序员你可要存好了!
  2. python实现人脸识别抓取人脸并做成熊猫头表情包
  3. 从零开始学理财(内容详实)
  4. 禁忌搜索(Tabu Search(TS))
  5. 江西师范大学计算机考研经验分享
  6. 免安装Oracle客户端就能使用pl/sql developer
  7. Cobalt Strike的多种上线提醒方法
  8. 鼠标离开触发ajax,鼠标离开浏览器窗口时的Javascript事件[重复]
  9. 教你制作手机电子书android应用 无技术要求
  10. 抖音 x-gorgon 03 免费生成接口 抖音6.3.0版本