MySQL的explain analyze增强功能
我们排查关系型数据库的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的输出增加。
cost表示优化器评估的成本。
rows第一个rows表示估计访问的行数, 第二个rows表示真正执行的行数
actual time时间actual time=0.048..7.194,前面的值是获取第一行所耗费的时间,第二个7.194是获取所有记录花费的时间。如果循环多次,loops大于1 ,则该值就是一次循环对应的平均时间。
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增强功能相关推荐
- MySQL EXPLAIN ANALYZE
本文转载自"MySQL解决方案工程师"公众号,由 徐轶韬翻译 作者:Norvald H. Ryeng 译:徐轶韬 MySQL8.0.18刚刚发布,它包含一个全新的功能EXPLAI ...
- 根据条件查询某条记录的条数_「性能与架构」MySQL 8 查询优化新工具 Explain Analyze...
来源:性能与架构公众号 1. Explain Analyze 介绍 Explain 是我们常用的查询分析工具,可以对查询语句的执行方式进行评估,给出很多有用的线索. 但他仅仅是评估,不是实际的执行情况 ...
- mysql按照列构建索引_列存储索引增强功能–在线和离线(重新)构建
mysql按照列构建索引 In this article, we will explore ' Clustered columnstore online index build and rebuild ...
- 数据库索引统计信息不一致_列存储索引增强功能–克隆数据库中的索引统计信息更新
数据库索引统计信息不一致 SQL Server was launched in 1993 on WinNT and it completed its 25-year anniversary recen ...
- mysql的explain怎么看_mysql中explain用法详解
如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1 ...
- PostgreSQL 12:新功能和增强功能
目录 介绍 新功能和增强功能 CTE增强 生成列 重新索引改进 默认情况下启用JIT编译 查询并行性改进 PL/pgSQL增强 SQL / JSON路径查询 分区改进 拼写改进 MCV统计信息现在支持 ...
- SQL截断增强功能:SQL Server 2019中的静默数据截断
In this article, we'll take a look into SQL truncate improvement in SQL Server 2019. 在本文中,我们将研究SQL S ...
- 行存储索引改换成列存储索引_列存储索引增强功能–数据压缩,估计和节省
行存储索引改换成列存储索引 Data compression is required to reduce database storage size as well as improving perf ...
- php mysql留言板系统_PHP结合Mysql数据库实现留言板功能
先给大家展示下留言板效果图: 最近看了下PHP基础语法,就想利用这些基本东西实现留言板,也是对基础知识的一个巩固. 什么是留言板?一种可以用来记录,展示文字信息的载体. 现切入正题,说说本次留言板是怎 ...
最新文章
- 信息系统项目管理师项目变更管理
- 《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一1.6 正确度量...
- 【多线程学习笔记】sychronized关键字底层原理、sychronized与ReentrantLock、volatile和synchronized
- 李航书上隐马尔科夫模型案例的实验结果复现
- [html] 如何给页面添加追加右键菜单(原右键菜单功能保持不变)
- 苹果忘记开机密码_苹果电脑忘记开机密码快速恢复的方法!
- git菜单形式的_添加“Git Bash Here”到右键菜单
- 美团暑期日常实习前端面试
- 数据挖掘十大算法-决策树的实现
- prism.js让页面代码变漂亮
- 大整数的代数运算_高等代数教学笔记2:多项式I
- Python + OpenCv实现视频中的车辆检测计数(车流量统计) (2020.7.15已更新源码)
- 谷歌云盘快速下载大文件
- Spring AOP原理详解及实例
- Java的图标和由来
- 手机越贵,打车越贵?复旦教授三万字打车报告,实锤打车软件“大数据杀熟”
- python 包络线_如何简明易懂地说明数据包络线分析法(DEA)?
- [HNOI2015]亚瑟王 题解
- 阿里开放平台接入——开放平台注册与API调用
- 病案首页计算机管理系统功能一般不包括,病案管理系统
热门文章
- python编程语言汇总-最全的编程语言汇总,程序员你可要存好了!
- python实现人脸识别抓取人脸并做成熊猫头表情包
- 从零开始学理财(内容详实)
- 禁忌搜索(Tabu Search(TS))
- 江西师范大学计算机考研经验分享
- 免安装Oracle客户端就能使用pl/sql developer
- Cobalt Strike的多种上线提醒方法
- 鼠标离开触发ajax,鼠标离开浏览器窗口时的Javascript事件[重复]
- 教你制作手机电子书android应用 无技术要求
- 抖音 x-gorgon 03 免费生成接口 抖音6.3.0版本