MySQL 8 查询优化新工具 Explain Analyze
source link: http://mp.weixin.qq.com/s?__biz=MzA4Nzc4MjI4MQ%3D%3D&%3Bmid=2652403712&%3Bidx=1&%3Bsn=6d67a4c4803a924e6c85152ab817be3b
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
1. Explain Analyze 介绍
Explain是我们常用的查询分析工具,可以对查询语句的执行方式进行评估,给出很多有用的线索。
但他仅仅是 评估 ,不是实际的执行情况,比如结果中的 rows ,可能和实际结果相差甚大。
Explain Analyze是 MySQL 8 中提供的新工具,牛X之处在于可以给出 实际执行情况 。
Explain Analyze是一个查询性能分析工具,可以详细的显示出 查询语句执行过程中,都在哪儿花费了多少时间。
Explain Analyze 会做出查询计划,并且会实际执行,以测量出查询计划中各个关键点的实际指标,例如耗时、条数,最后详细的打印出来。
2. 实践效果
例如有如下一条查询语句:
SELECT first_name, last_name, SUM(amount) AS total FROM 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 ANALYZE SELECT first_name, last_name, SUM(amount) AS total FROM 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. 小结
感谢阅读,希望对你有所帮助 :pray:
参考资料:
https://mysqlserverteam.com/mysql-explain-analyze/
https://www.percona.com/blog/2019/10/28/using-explain-analyze-in-mysql-8/
推荐阅读
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK