900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 根据条件查询某条记录的条数_「性能与架构」MySQL 8 查询优化新工具 Explain Analyze...

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

时间:2018-12-21 08:31:29

相关推荐

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

来源:性能与架构公众号

1. Explain Analyze 介绍

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

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

Explain AnalyzeMySQL 8中提供的新工具,牛X之处在于可以给出实际执行情况

Explain Analyze是一个查询性能分析工具,可以详细的显示出 查询语句执行过程中,都在哪儿花费了多少时间。

Explain Analyze 会做出查询计划,并且会实际执行,以测量出查询计划中各个关键点的实际指标,例如耗时、条数,最后详细的打印出来。

2. 实践效果

例如有如下一条查询语句:

SELECTfirst_name,last_name,SUM(amount)AStotalFROMstaffINNERJOINpaymentONstaff.staff_id=payment.staff_idANDpayment_dateLIKE'-08%'GROUPBYfirst_name,last_name;

现在对它执行Explain Analyze,只需要添加在 SELECT 前边就行了:

EXPLAINANALYZESELECTfirst_name,last_name,SUM(amount)AStotalFROMstaffINNERJOINpaymentONstaff.staff_id=payment.staff_idANDpayment_dateLIKE'-08%'GROUPBYfirst_name,last_name;

执行结果:

结果中包含了各个执行步骤的详细情况,内容比较多,图片中不方便看,下面咱就拿出其中一条看一下:

Filter:(payment.payment_datelike'-08%')(cost=117.43rows=894)(actualtime=0.454..194.045rows=2844loops=2)

Filter 表示这是执行过滤的一个步骤。

(payment.payment_datelike'-08%')

这部分是过滤条件。

(cost=117.43rows=894)

这部分是估算的结果,预计需要花费的时间,和返回的记录条数。

这就是在真正执行之前,查询优化器所做的估算。

(actualtime=0.454..194.045rows=2844loops=2)

这部分就是实际执行的结果数据了。

time 的结果中分为2个部分,前面的 0.454 是返回第一条记录的耗时,后面的 194.045 是返回所有记录的耗时。

rows 就是实际返回的准确记录条数。

loops 是当前过滤迭代器所执行的循环的数量。

3. 实际环境

如果你想实际试试,可以使用 MySQL 提供的测试数据库sakila

下载地址:

/doc/index-other.html

![image-2002114403512](/Users/a/Library/Application Support/typora-user-images/image-2002114403512.png)

解压后倒入MySQL:

mysql>SOURCE/xxx/sakila-schema.sql;mysql>SOURCE/xxx/sakila-data.sql;

4. 小结

感谢阅读,希望对你有所帮助

参考资料:

/mysql-explain-analyze/

/blog//10/28/using-explain-analyze-in-mysql-8/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。