ウィンドウ化された集計を含むプランは、通常、共通のサブ式スプールを使用します。このタイプの計画の適切な記述は、ここにあるPartitioning and the Common Subexpression Spool です。
テーブルに次の行があるとします
CREATE TABLE [dbo].[EMP](
[EMPNO] [int] NOT NULL,
[SAL] [int] NULL)
INSERT INTO [dbo].[EMP]
VALUES (1,1),
(1,2),
(1,3),
(1,4),
(2,1),
(2,2)
合計で 6 つの行があり、2 つの個別のEMPNO
値があります。実際に出力された行数を示す実際の実行計画は次のとおりです。

プランの先頭にあるセグメント イテレータは、それを通過する行にフラグを追加し、それがいつ新しいパーティションの開始であるか (つまり、empno
変更されたか) を示します。
すぐ左のスプール (プライマリ スプール) は、セグメント イテレータから一度に 1 行を取得し、それを tempdb の作業テーブルに挿入します。新しいグループが開始されたことを示すフラグを取得すると、ネストされたループ演算子の一番上の入力に行が返されます。
これにより、作業テーブル (計画の 2 次スプール) 内の行に対してストリーム集約が呼び出されますSUM([SAL])
。作業テーブルは切り捨てられ、新しいグループの準備が整います。
1 次セグメント・スプールは、処理される最終グループを取得するためにダミー行を発行します。これが、発行される実際の行数が 3 (グループ数 + 1) として表示される理由です。