我正在尝试对大量手动“分区”表执行聚合。我可以使用以下样式的 T-SQL 来做到这一点。
SELECT A, B, C, COUNT(*)
FROM
(
SELECT ...
UNION ALL
SELECT ...
UNION ALL
SELECT ...
-- and many more!
) X
GROUP BY A, B, C
我的问题/担心是 SQL Server 似乎同时启动了所有嵌套的 SELECT。我想知道是否有任何模式可以让嵌套的 SELECT 一个接一个地运行,以减少服务器上的资源争用。
我不想要(并且怀疑正在发生)是所有子选择都在并行运行,并且它们中的大多数都在缓冲它们的输出(虽然不知道如何证明这一点)。
到目前为止,我能想到的最好的方法是一个显式的临时表(或表值变量),它将每个独立的输出写入它,然后聚合它,但这会导致比实际更多的行被物化需要:我希望输出流入聚合过程,这实际上意味着不需要太多的中间存储。
(嵌套选择实际上是非常复杂的自连接,但经过精心设计以产生合并连接,因此最少的中间结果需要在内存中或分页。)
有谁知道实现这一目标的更好模式?