首页 >数据库 >mysql教程 >使用公共子表达式假脱机时,为什么我的窗口聚合查询显示出意外的高逻辑读取?

使用公共子表达式假脱机时,为什么我的窗口聚合查询显示出意外的高逻辑读取?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-21 05:57:14344浏览

Why Are My Windowed Aggregate Queries Showing Unexpectedly High Logical Reads When Using Common Subexpression Spools?

为什么具有公共子表达式假脱机的窗口聚合函数的逻辑读取量很高?

在执行计划中使用公共子表达式假脱机时,特别是对于窗口聚合函数,会出现令人惊讶的高逻辑读取对于大表已经观察到。这种行为引起了人们对此类假脱机效率的担忧。

根本原因:工作表逻辑读取的唯一计数

与传统假脱机表不同,工作表的逻辑读取是用于聚合的内部结构, 计算方式不同。工作表逻辑读取不是测量散列页,而是针对每行读取递增。尽管工作表效率很高,但这种独特的计数方法导致看似很高的计数。

理解公式

在您的具体情况下,您发现的公式是“工作表逻辑读取 = 1 NumberOfRows 2 NumberOfGroups 4,”由于这些的特定行为而成立线轴:

  • 1 : 初始开销和最终虚拟行
  • NumberOfRows * 2: 两个辅助线轴的完整读取
  • 组数 * 4: 主线轴发出 (NumberOfGroups 1) 行

其他见解

  • 主线轴发出附加行以表示最终组的结束。
  • 该公式在最终组件中考虑了这一额外行,使其成为 NumberOfGroups 1.

故障排除提示

虽然跟踪页面读取不是工作表的一个选项,但了解这些独特的计数机制可以帮助解释观察到的高逻辑读取。

参考

如需进一步说明,请参阅至:

  • 查询调优和优化书籍,第 3 章
  • Paul White 关于常见子表达式假脱机的博客文章

以上是使用公共子表达式假脱机时,为什么我的窗口聚合查询显示出意外的高逻辑读取?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn