Pläne mit Fenster Aggregate normalerweise eine gemeinsame Unter Ausdruck Spule verwenden. Eine gute aufzuschreiben dieser Art von Plan ist hier Partitioning and the Common Subexpression Spool
der Tabelle Nehmen wir die folgenden Zeilen hat
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)
Es verfügt über 6 Zeilen insgesamt mit 2 verschiedenen EMPNO
Werte. Der tatsächliche Ausführungsplan, der die tatsächliche Anzahl der ausgegebenen Zeilen zeigt, ist darunter.
Der Iterator-Segment an der Spitze des Plans fügt ein Flag in den Zeilen, die durch ihn angibt, übergeben, wenn es der Beginn einer neuen Partition ist (das heißt der empno
geändert hat).
Der Spool zu seiner unmittelbaren Linken (primäre Spool) ruft eine Reihe nach dem Segment-Iterator und fügt es in eine Arbeitstabelle in Tempdb ein. Sobald das Flag angezeigt wird, dass eine neue Gruppe gestartet wurde, wird eine Zeile an die oberste Eingabe des Nested Loop-Operators zurückgegeben.
Dies bewirkt, dass der Strom Aggregat über die Zeilen in dem Arbeitstisch (Sekundärspule im Plan) aufgerufen wird, wird die SUM([SAL])
berechnet dann wird dieser Wert mit den Zeilen in dem Arbeitstisch (den dritte Spule Operator verbunden wieder der Plan), bevor die Arbeitstabelle für die neue Gruppe abgeschnitten wird.
Die primäre Segment Spule emittiert einen Scheinzeile, um die endgültige Gruppe verarbeitet zu erhalten, weshalb die tatsächliche Anzahl von Reihen ausgesendet wird, wie 3 (Anzahl der Gruppen plus eins) gezeigt