根据条件查询某条记录的条数_「性能与架构」MySQL 8 查询优化新工具 Explain Analyze...
来源:性能与架构公众号
1. Explain Analyze 介绍
Explain 是我们常用的查询分析工具,可以对查询语句的执行方式进行评估,给出很多有用的线索。
但他仅仅是评估,不是实际的执行情况,比如结果中的 rows,可能和实际结果相差甚大。
Explain Analyze 是 MySQL 8 中提供的新工具,牛X之处在于可以给出实际执行情况。
Explain Analyze 是一个查询性能分析工具,可以详细的显示出 查询语句执行过程中,都在哪儿花费了多少时间。
Explain Analyze 会做出查询计划,并且会实际执行,以测量出查询计划中各个关键点的实际指标,例如耗时、条数,最后详细的打印出来。
2. 实践效果
例如有如下一条查询语句:
SELECT first_name, last_name, SUM(amount) AS totalFROM staff INNER JOIN payment ON staff.staff_id = payment.staff_id AND payment_date LIKE '2005-08%'GROUP BY first_name, last_name;
现在对它执行 Explain Analyze,只需要添加在 SELECT 前边就行了:
EXPLAIN ANALYZESELECT first_name, last_name, SUM(amount) AS totalFROM staff INNER JOIN payment ON staff.staff_id = payment.staff_id AND payment_date LIKE '2005-08%'GROUP BY first_name, last_name;
执行结果:
结果中包含了各个执行步骤的详细情况,内容比较多,图片中不方便看,下面咱就拿出其中一条看一下:
Filter: (payment.payment_date like '2005-08%') (cost=117.43 rows=894) (actual time=0.454..194.045 rows=2844 loops=2)
Filter 表示这是执行过滤的一个步骤。
(payment.payment_date like '2005-08%')
这部分是过滤条件。
(cost=117.43 rows=894)
这部分是估算的结果,预计需要花费的时间,和返回的记录条数。
这就是在真正执行之前,查询优化器所做的估算。
(actual time=0.454..194.045 rows=2844 loops=2)
这部分就是实际执行的结果数据了。
time 的结果中分为2个部分,前面的 0.454 是返回第一条记录的耗时,后面的 194.045 是返回所有记录的耗时。
rows 就是实际返回的准确记录条数。
loops 是当前过滤迭代器所执行的循环的数量。
3. 实际环境
如果你想实际试试,可以使用 MySQL 提供的测试数据库 sakila。
下载地址:
https://dev.mysql.com/doc/index-other.html
![image-20200702114403512](/Users/a/Library/Application Support/typora-user-images/image-20200702114403512.png)
解压后倒入MySQL:
mysql> SOURCE /xxx/sakila-schema.sql;mysql> SOURCE /xxx/sakila-data.sql;
4. 小结
感谢阅读,希望对你有所帮助
参考资料:
https://mysqlserverteam.com/mysql-explain-analyze/
https://www.percona.com/blog/2019/10/28/using-explain-analyze-in-mysql-8/
根据条件查询某条记录的条数_「性能与架构」MySQL 8 查询优化新工具 Explain Analyze...相关推荐
- CRM客户关系管理系统开发第十九讲——实现客户拜访记录管理模块中条件查询客户拜访记录列表的功能
在客户拜访记录列表页面上准备一些筛选条件 首先,咱得在客户拜访记录列表页面上准备一些筛选条件,不妨我们按照拜访时间来进行筛选.之前咱在实现联系人管理模块中条件查询联系人列表的功能时,文本输入框使用的是 ...
- mysql 分组取最新的一条记录(整条记录)
方法:mysql取分组后最新的一条记录,下面两种方法.一种是先筛选 出最大和最新的时间,在连表查询.一种是先排序,然后在次分组查询(默认第一条),就是最新的一条数据了 #select * from t ...
- GROUP BY 条件查询最新时间记录
概述: 最近项目一个查询需求是从一个表中同一个IP多条记录的只获取一条IP记录,而这条IP记录要最新的.很明显需求没什么难,分组当然想到的是group by,但是这里是有个时间条件筛选的.虽然网上很多 ...
- mysql批量删除多条记录的sql语句_一次删除多条记录的sql语句
在sql中要一次性删除多条记录我想到二种方法,一种是利用sql in一种是利用循环一条条删除,下面我们主要讲关于sql in 在sql中要一次性删除多条记录我想到二种方法,一种是利用sql in一种是 ...
- 小明加密通道进入_「成都全接触」最新!成都8条地铁进展来了!年底还有5条铁路、9条通道!...
友情提示:2020余额已不足四分之一大家关心的8条地铁线路也有了最新进度其中包括5条预计今年开通3条全新路线.2条机场快速线一起来看看有没有路过你家门口的(内含路线图)-10号线三期-最新进展:全线5 ...
- go mongodb排序查询_「赵强老师」MongoDB中的索引(下)
(四)索引的类型三:复合索引(Compound Index)** MongoDB支持复合索引,即将多个键组合到一起创建索引.该方式称为复合索引,或者也叫组合索引,该方式能够满足多键值匹配查询使用索引的 ...
- SQL--合并多条记录为一条记录
--作用:'源'表中,如果A列的记录相同的,则把B列的记录合并,再写到'目的'表中,如果不相同,则原样插入到'目的'表中 ---两个原始表之一,源 if exists (select * from d ...
- 字符串字段当条件查询的时候需要加引号吗_如此详细的SQL优化教程,是你需要的吗?...
基础数据准备 二:五百万数据插入 上面插入几条测试数据,在使用索引时还需要插入更多的数据作为测试数据,下面就通过存储过程插入500W条数据作为测试数据 三:使用索引和不使用索引的比较 没有添加索引前一 ...
- vue aplayer 进度条无法拖动_「最近项目小结」使用Vue实现一个简单的鼠标拖拽滚动效果插件...
演示事例 http://www.longstudy.club/vue-drag-scroll/index.html 最近在做一个新的项目,有个需求是这样的: 简单描述一下,就是鼠标拖动页面,整个页面会 ...
最新文章
- 标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)
- python3安卓版下载-QPython3H安卓运行Python神器
- ddl是什么意思网络语_DDL语句是啥
- debian安vs_debian下使用vs code
- 《MySQL——如何解决一主多从的读写分离的过期读问题》
- 未来计算机作文1000字,未来的生活作文1000字
- MyBatis系列-Mybatis入门精讲
- python每行乘列表_python – 在pandas数据帧中查找每行的两列列表中哪一列的最快方法...
- A股开盘:深证区块链50指数跌0.46%,泰豪科技涨停
- Reg Exp正则表达式
- c语言指针详解 PPT,最全C语言指针详解.ppt
- 想让“贾维斯”成为现实?物联网帮你拥有
- VS Code(8)- 终端模拟器
- python3中flask下载文件:图像.jpg
- FineReport 基础报表样式
- SmS-Activate一款好用的短信验证码接收工具
- 「.XD 文件 」用什么软件打开?
- Linux 命令行批处理图片,批量去除截图的无用部分
- Windows平台批量移动百万文件
- CSS中常见的几种高度自适应布局