手動で「分割された」テーブルの大規模なセットに対して集計を実行しようとしています。以下のスタイルの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 を次々に実行できるパターンがあるかどうか疑問に思っています。
私が望んでいない(そして起こっていると思われる)のは、すべてのサブSELECTが並行して実行されており、それらのほとんどが出力をバッファリングしていることです(ただし、これを証明する方法はわかりません)。
これまでに思いついたのは、明示的な一時テーブル (またはテーブル値の変数) で、それぞれからの出力が独立して書き込まれ、それを集計しますが、実際よりも多くの行が具体化されます。である必要があります: 出力を集計プロセスにストリーミングすることを望みます。これは、中間ストレージがあまり必要ないことを効果的に意味します。
(ネストされた選択は実際には非常に複雑な自己結合ですが、マージ結合になるように細工されているため、最小限の中間結果をメモリまたはページングする必要があります。)
これを達成するためのより良いパターンを知っている人はいますか?