Dza*_*ton 9 sql sql-server performance
在表 中T,保证列的每个值都A与列的一个值相关联B(即存在函数依赖性A \xe2\x86\x92 B)。因此,下面的两个查询都会返回相同的结果。一般来说,哪一个跑得更快?
A在和上使用 GROUP BYB
select\n A\n ,B\n ,sum(C) \nfrom\n T\ngroup by\n A\n ,B\nRun Code Online (Sandbox Code Playgroud)\n\n或者使用 MAX/MIN B?
select\n A\n ,MAX(B)\n ,sum(C) \nfrom\n T\ngroup by\n A\nRun Code Online (Sandbox Code Playgroud)\n\n我确实知道 GROUP BYA和Bversion 更擅长不隐藏与A多个 相关联的数据问题B,我只是好奇其中一个查询通常是否需要 DBMS 执行更多工作。如果答案完全取决于 DBMS 的选择,并且您仍然有有趣的信息可以分享,那么选择您最喜欢的 DBMS 并仅回答它。
Dza*_*ton 11
尽管我有兴趣发现更一般的、基于理论的信息,但我还是继续在 SQL Server 2016 上运行了测试。我在上述角色中使用了四列B来强调运行时的任何差异,并提交了包含上述两种类型查询的批处理。SQL Server 生成的执行计划几乎相同,但 GROUP BY 查询报告的成本为批处理的 53%,而 MAX/MIN 查询的成本为 47%。
两个查询的初始索引查找步骤是相同的。接下来是哈希表构建步骤,其中 GROUP BY 版本比 MAX/MIN 版本产生更高的成本。对于这两个版本来说,之后的步骤的成本可以忽略不计。
与直觉相反,尽管 GROUP BY 版本的成本稍高,但它的运行时间略少。我想如果并行度更大的话,运行时仍然可能消耗更多的 CPU 周期。此时,我已经无法(和兴趣)探查 DBMS 执行计划,所以我将其留在那里。
| 归档时间: |
|
| 查看次数: |
4089 次 |
| 最近记录: |