搜索
首页数据库mysql教程为什么窗口聚合函数会导致 SQL Server 中如此高的逻辑读取?

Why Do Windowed Aggregate Functions Cause Such High Logical Reads in SQL Server?

为什么窗口聚合函数的逻辑读取量很高?

在执行计划中使用公共子表达式假脱机时,逻辑读取往往会显着增加对于更大的桌子。经过实验和观察执行计划,发现以下公式似乎成立:

工作表逻辑读取 = 1 NumberOfRows 2 NumberOfGroups 4

然而,这个公式的根本原因仍不清楚。本文旨在揭开逻辑读取计算背后的谜团。

理解窗口聚合函数执行

计划开始时的段迭代器会向行附加一个标志指示每个新分区的开始。随后,主段假脱机每次检索一行并将它们插入到 tempdb 工作表中。遇到新的组标志时,假脱机将一行返回到嵌套循环运算符的上部输入。

这会触发工作表行上的流聚合,计算平均值。然后将计算出的平均值与工作表行连接,并截断工作表以准备下一组。 Segment spool 生成一个虚拟行来处理最后的组。

工作表的逻辑读取计算

根据我们的理解,工作表是一个堆(或索引假脱机)如果计划中另有规定)。在提供的示例中,与预期相反,仅需要 11 次逻辑读取。对于这种差异的解释如下:

  • 向工作表中的行插入每次都会产生一次逻辑读取,从而导致 3 次逻辑读取。
  • 计算平均值涉及一次逻辑读取,总共进行 4 次读取。
  • 返回具有平均列的行涉及四个逻辑
  • 截断工作表不会产生逻辑读取。

这使逻辑读取总数达到 4 x 3 = 12,省略了触发逻辑读取的第四行的插入只在原作中

结论

理解这个公式的关键在于工作表和常规假脱机表的逻辑读取计数之间的差异。对于工作表,读取的每一行都被计为一次逻辑读取,而对于假脱机表,每个散列页都被计数。

该公式与观察到的执行情况一致:两个辅助假​​脱机被读取两次(2 COUNT ()),而主线轴发出 (COUNT(DISTINCT CustomerID) 1) 行,如附加信息中提到的博客条目中所述。额外的一个是由于发出额外的行来指示最后一组的结束。

以上是为什么窗口聚合函数会导致 SQL Server 中如此高的逻辑读取?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
MySQL如何处理数据复制?MySQL如何处理数据复制?Apr 28, 2025 am 12:25 AM

MySQL通过异步、半同步和组复制三种模式处理数据复制。1)异步复制性能高但可能丢失数据。2)半同步复制提高数据安全性但增加延迟。3)组复制支持多主复制和故障转移,适用于高可用性需求。

您如何使用解释性语句分析查询性能?您如何使用解释性语句分析查询性能?Apr 28, 2025 am 12:24 AM

EXPLAIN语句可用于分析和提升SQL查询性能。1.执行EXPLAIN语句查看查询计划。2.分析输出结果,关注访问类型、索引使用情况和JOIN顺序。3.根据分析结果,创建或调整索引,优化JOIN操作,避免全表扫描,以提升查询效率。

您如何备份并还原MySQL数据库?您如何备份并还原MySQL数据库?Apr 28, 2025 am 12:23 AM

使用mysqldump进行逻辑备份和MySQLEnterpriseBackup进行热备份是备份MySQL数据库的有效方法。1.使用mysqldump备份数据库:mysqldump-uroot-pmydatabase>mydatabase_backup.sql。2.使用MySQLEnterpriseBackup进行热备份:mysqlbackup--user=root--password=password--backup-dir=/path/to/backupbackup。恢复时,使用相应的命

MySQL中慢速查询的常见原因是什么?MySQL中慢速查询的常见原因是什么?Apr 28, 2025 am 12:18 AM

MySQL慢查询的主要原因包括索引缺失或不当使用、查询复杂度、数据量过大和硬件资源不足。优化建议包括:1.创建合适的索引;2.优化查询语句;3.使用分表分区技术;4.适当升级硬件。

MySQL中有什么看法?MySQL中有什么看法?Apr 28, 2025 am 12:04 AM

MySQL视图是基于SQL查询结果的虚拟表,不存储数据。1)视图简化复杂查询,2)增强数据安全性,3)维护数据一致性。视图是数据库中的存储查询,可像表一样使用,但数据动态生成。

MySQL和其他SQL方言之间的语法有什么区别?MySQL和其他SQL方言之间的语法有什么区别?Apr 27, 2025 am 12:26 AM

mysqldiffersfromothersqldialectsinsyntaxforlimit,自动启动,弦乐范围,子征服和表面上分析。1)MySqluessLipslimit,whilesqlserverusestopopandoraclesrontersrontsrontsrontsronnum.2)

什么是mysql分区?什么是mysql分区?Apr 27, 2025 am 12:23 AM

MySQL分区能提升性能和简化维护。1)通过按特定标准(如日期范围)将大表分成小块,2)物理上将数据分成独立文件,3)查询时MySQL可专注于相关分区,4)查询优化器可跳过不相关分区,5)选择合适的分区策略并定期维护是关键。

您如何在MySQL中授予和撤销特权?您如何在MySQL中授予和撤销特权?Apr 27, 2025 am 12:21 AM

在MySQL中,如何授予和撤销权限?1.使用GRANT语句授予权限,如GRANTALLPRIVILEGESONdatabase_name.TO'username'@'host';2.使用REVOKE语句撤销权限,如REVOKEALLPRIVILEGESONdatabase_name.FROM'username'@'host',确保及时沟通权限变更。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具