根据条件查询某条记录的条数-ag凯发k8国际
来源:性能与架构公众号
explain 是我们常用的查询分析工具,可以对查询语句的执行方式进行评估,给出很多有用的线索。
但他仅仅是评估,不是实际的执行情况,比如结果中的 rows,可能和实际结果相差甚大。
explain analyze 是 mysql 8 中提供的新工具,牛x之处在于可以给出实际执行情况。
explain analyze 是一个查询性能分析工具,可以详细的显示出 查询语句执行过程中,都在哪儿花费了多少时间。
explain analyze 会做出查询计划,并且会实际执行,以测量出查询计划中各个关键点的实际指标,例如耗时、条数,最后详细的打印出来。
例如有如下一条查询语句:
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 是当前过滤迭代器所执行的循环的数量。
如果你想实际试试,可以使用 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;感谢阅读,希望对你有所帮助
参考资料:
https://mysqlserverteam.com/mysql-explain-analyze/
https://www.percona.com/blog/2019/10/28/using-explain-analyze-in-mysql-8/
与50位技术专家面对面20年技术见证,附赠技术全景图总结
以上是ag凯发k8国际为你收集整理的根据条件查询某条记录的条数_「性能与架构」mysql 8 查询优化新工具 explain analyze...的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: sql优化的方法及思路_合理的sql优化