来源:性能与架构公众号

1. Explain Analyze 介绍

Explain 是我们常用的查询分析工具,可以对查询语句的执行方式进行评估,给出很多有用的线索。

但他仅仅是评估,不是实际的执行情况,比如结果中的 rows,可能和实际结果相差甚大。

Explain AnalyzeMySQL 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...相关推荐

  1. CRM客户关系管理系统开发第十九讲——实现客户拜访记录管理模块中条件查询客户拜访记录列表的功能

    在客户拜访记录列表页面上准备一些筛选条件 首先,咱得在客户拜访记录列表页面上准备一些筛选条件,不妨我们按照拜访时间来进行筛选.之前咱在实现联系人管理模块中条件查询联系人列表的功能时,文本输入框使用的是 ...

  2. mysql 分组取最新的一条记录(整条记录)

    方法:mysql取分组后最新的一条记录,下面两种方法.一种是先筛选 出最大和最新的时间,在连表查询.一种是先排序,然后在次分组查询(默认第一条),就是最新的一条数据了 #select * from t ...

  3. GROUP BY 条件查询最新时间记录

    概述: 最近项目一个查询需求是从一个表中同一个IP多条记录的只获取一条IP记录,而这条IP记录要最新的.很明显需求没什么难,分组当然想到的是group by,但是这里是有个时间条件筛选的.虽然网上很多 ...

  4. mysql批量删除多条记录的sql语句_一次删除多条记录的sql语句

    在sql中要一次性删除多条记录我想到二种方法,一种是利用sql in一种是利用循环一条条删除,下面我们主要讲关于sql in 在sql中要一次性删除多条记录我想到二种方法,一种是利用sql in一种是 ...

  5. 小明加密通道进入_「成都全接触」最新!成都8条地铁进展来了!年底还有5条铁路、9条通道!...

    友情提示:2020余额已不足四分之一大家关心的8条地铁线路也有了最新进度其中包括5条预计今年开通3条全新路线.2条机场快速线一起来看看有没有路过你家门口的(内含路线图)-10号线三期-最新进展:全线5 ...

  6. go mongodb排序查询_「赵强老师」MongoDB中的索引(下)

    (四)索引的类型三:复合索引(Compound Index)** MongoDB支持复合索引,即将多个键组合到一起创建索引.该方式称为复合索引,或者也叫组合索引,该方式能够满足多键值匹配查询使用索引的 ...

  7. SQL--合并多条记录为一条记录

    --作用:'源'表中,如果A列的记录相同的,则把B列的记录合并,再写到'目的'表中,如果不相同,则原样插入到'目的'表中 ---两个原始表之一,源 if exists (select * from d ...

  8. 字符串字段当条件查询的时候需要加引号吗_如此详细的SQL优化教程,是你需要的吗?...

    基础数据准备 二:五百万数据插入 上面插入几条测试数据,在使用索引时还需要插入更多的数据作为测试数据,下面就通过存储过程插入500W条数据作为测试数据 三:使用索引和不使用索引的比较 没有添加索引前一 ...

  9. vue aplayer 进度条无法拖动_「最近项目小结」使用Vue实现一个简单的鼠标拖拽滚动效果插件...

    演示事例 http://www.longstudy.club/vue-drag-scroll/index.html 最近在做一个新的项目,有个需求是这样的: 简单描述一下,就是鼠标拖动页面,整个页面会 ...

最新文章

  1. 标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)
  2. python3安卓版下载-QPython3H安卓运行Python神器
  3. ddl是什么意思网络语_DDL语句是啥
  4. debian安vs_debian下使用vs code
  5. 《MySQL——如何解决一主多从的读写分离的过期读问题》
  6. 未来计算机作文1000字,未来的生活作文1000字
  7. MyBatis系列-Mybatis入门精讲
  8. python每行乘列表_python – 在pandas数据帧中查找每行的两列列表中哪一列的最快方法...
  9. A股开盘:深证区块链50指数跌0.46%,泰豪科技涨停
  10. Reg Exp正则表达式
  11. c语言指针详解 PPT,最全C语言指针详解.ppt
  12. 想让“贾维斯”成为现实?物联网帮你拥有
  13. VS Code(8)- 终端模拟器
  14. python3中flask下载文件:图像.jpg
  15. FineReport 基础报表样式
  16. SmS-Activate一款好用的短信验证码接收工具
  17. 「.XD 文件 」用什么软件打开?
  18. Linux 命令行批处理图片,批量去除截图的无用部分
  19. Windows平台批量移动百万文件
  20. CSS中常见的几种高度自适应布局

热门文章

  1. Android开发学习之路-环境搭建
  2. CSS3 选择器(转)
  3. db2 之 入门实验
  4. Markdown —— 开源者必备的文字编辑工具
  5. java Memcache使用详解
  6. highcharts学习1----Line charts
  7. 利用WDS实现零接触部署Windows 7 VHD
  8. 10 个 GitHub 上超火和超好看的管理后台模版,后台管理项目有着落了
  9. reactjs render props向组件内部动态传入带内容的标签
  10. linux fedora35更改开机默认等待时间timeout