本周早些时候,我写道SQL SERVER—行存储中批处理模式的案例。很多人在看完博客后开始提问。最常见的问题是关于行模式和批处理模式之间的性能差异。让我们在这篇博客中看到批处理模式和行模式之间的性能比较。

这是在Stackoverflow数据库的非常大的表上运行的示例脚本。您可以使用任何其他大型数据库,也可以只使用自己的大型表。在运行以下查询之前,请在服务器管理工作室中启用实际的执行计划,因为我们稍后将对它们进行比较。
USE StackOverflow2013
GO
-- turn on the graphical plan here CTRL+M
SET STATISTICS IO, TIME ON
GO
-- SQL Server 2017
ALTER DATABASE StackOverflow2013 SET COMPATIBILITY_LEVEL = 140
GO
-- RowMode in RowStore
SELECT SUM(CommentCount) TotalComment,
Score
FROM Posts
GROUP BY Score
ORDER BY Score DESC
GO
-- SQL Server 2019
ALTER DATABASE StackOverflow2013 SET COMPATIBILITY_LEVEL = 150
GO
-- BatchMode in Rowstore
SELECT SUM(CommentCount) TotalComment,
Score
FROM Posts
GROUP BY Score
ORDER BY Score DESC
GO
由于我们已经启用了统计信息输入输出和时间,我们可以在消息窗口中看到各种细节。
以下是第一个查询的详细信息,该查询针对兼容级别140 (SQL Server 2017)运行,并且在执行计划中具有行执行模式。
表格“工作台”。扫描计数0,逻辑读取0
表“工作文件”。扫描计数0,逻辑读取0
表“帖子”。扫描计数9,逻辑读取4189540
SQL Server执行时间:
中央处理器时间= 24312毫秒,运行时间=20758 ms
下面是第二个查询的详细信息,该查询针对兼容性级别150 (SQL Server 2010)运行,并且在执行计划中具有批处理执行模式。
表“帖子”。扫描计数9,逻辑读取4189540
表格“工作台”。扫描计数0,逻辑读取0
SQL Server执行时间:
中央处理器时间= 19512毫秒,运行时间=16948 ms。
在我的机器上,两个查询在性能上有明显的4秒差异。很明显,与行模式相比,批处理模式非常高效。
请注意,结果可能因您的系统而异,因为查询取决于您的系统是如何配置的。
让我们看看查询的执行计划。

从执行计划中可以非常清楚地看出,在执行计划中,两个查询花费的成本完全相同,为50%-50%,但是实际上,在行存储上执行批处理模式非常有效。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




