分析利器 — MySQL Explain Analyze

原创
数据库 MySQL
EXPLAIN ANALYZE是MySQL 8.0.18引入的查询分析工具,它在传统EXPLAIN的基础上扩展了实际执行数据的统计功能。

昨天发表的文章中,对比多种数据库对SQL的逻辑优化能力。有朋友留言谈到可以使用 MySQL Explan Analyze 方式查看执行情况,较为直观和准确。之前对这个命令了解不多,特测试了一下。本文简单总结下 Explan Analyze 的使用之法。

1. MySQL Explain Analyze 概述

EXPLAIN ANALYZE是MySQL 8.0.18引入的查询分析工具,它在传统EXPLAIN的基础上扩展了实际执行数据的统计功能。不仅生成查询计划,还会实际执行SQL语句,并输出每个执行算子(Iterator)的实际耗时、扫描行数、循环次数等详细信息,帮助开发者更精准地定位性能瓶颈。

(1)与Explain (Extended) 对比

这里与传统的 Explain 方法进行对比,这里引用来自DeepSeek的一段描述

总结来说,EXPLAIN ANALYZE 适合生产环境调优(但需注意真实执行开销),通过实际执行数据精准定位问题(如索引失效或统计信息偏差)。传统EXPLAIN,则适合快速验证查询计划,避免执行开销。EXPLAIN EXTENDED,在旧版本中用于深度分析优化器逻辑,现逐渐被FORMAT=JSON或FORMAT=TREE取代。

(2)Explain Analyze 示例

  • 执行顺序:按照从右到左、从上到下来解析。以树状层级展示执行流程,直观显示操作顺序。
  • 执行时间:分两段显示( actual time=0.0541..2.03),分别表示获取第一行和所有行的耗时。
  • 预估成本:显示预估成本( cost=1019)
  • 返回行数:显示预估行数( rows=10117)与实际返回行数(rows=10000),帮助发现统计信息偏差。
  • 循环次数(loops=N):表示迭代器执行次数,尤其在嵌套循环连接中体现驱动表与被驱动表的关系。

(3)与传统输出执行计划对比

之前大家经常诟病的MySQL执行计划输出简单,解读困难;通过 Analyze 的方式不仅内容更加丰富,而且更容易解读。这里列一个稍微复杂的示例。

同样的语句用Analyze方式输出,细节丰富了很多。

2. 通过 Analyze 方式解读执行计划

Analyze 方式可以让我们更好地理解 MySQL 的执行过程,可与 Explain 配合来使用。下面通过几个典型示例,说明下使用 Analyze 的优点。

(1)表关联

针对表关联,一是区分关联类型(嵌套、哈希),一是区分驱动关系(驱动表、被驱动表)。这两点通过树形层次结构都体现的比较清晰。此外,包括内层循环次数等,也都一目了然。

(2)集合操作

原有输出中是通过ID来表示执行顺序的,不是很直观。在集合示例中,层次结构表达的执行次序很清晰。

(3)聚合函数

对于聚合函数而言,传统方式说明使用二级索引扫描的方式得到结果,但Analyze 方式反而没有,这里有点奇怪。

(4)表过滤

(5)排序与分页

责任编辑:姜华 来源: 韩锋频道
相关推荐

2011-08-18 11:31:06

MySQL性能分析explain

2024-09-12 15:16:14

2017-07-27 20:00:47

MySQLEXPLAIN命令

2019-09-17 15:13:05

MySQLEXPLAIN数据库

2023-02-26 01:00:12

索引优化慢查询

2010-10-12 13:55:41

MySQL EXPLA

2017-04-07 14:30:26

2013-09-05 09:37:49

2024-12-11 13:14:27

2023-09-21 10:55:51

MysqlSQL语句

2009-12-10 16:12:07

EXPLAIN

2011-08-24 09:54:45

ANALYZE中文man

2021-01-18 07:31:52

MySQL LeetCode查询

2010-05-19 10:37:06

MySQL expla

2023-12-29 08:17:26

Python代码分析Profile

2016-12-26 15:28:34

恶意程序PowerShellA程序

2013-11-05 15:06:29

scdbg恶意代码分析安全工具

2012-05-24 10:09:52

ibmdw

2013-11-08 10:42:09

代码工具

2025-02-18 12:50:00

MySQL命令数据库
点赞
收藏

51CTO技术栈公众号