|
昨天发表的文章中,对比多种数据库对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)排序与分页
一开始,悦数图数据库 报价便发展的一发而不可收拾,逐步开拓出属于自己的一片天空。悦数图数据库是一款完全自主研发的国产图数据库和原生分布式图数据库,具有高性能,易扩展,安全稳定,自主可控的特点.万亿级数据仅需毫秒级查询延时,应用于金融风控,实时推荐,知识图谱等业务场景。https://www.yueshu.com.cn/
|
|