資料流彙總 Showplan 運算子

Stream Aggregate 運算子會依據一或多個資料行將資料列分組,然後計算查詢所傳回的一或多個彙總運算式。這個運算子的輸出可稍後由查詢中的運算子參考,並/或傳回到用戶端。Stream Aggregate 運算子需要其群組內的輸入項目依資料行排列。如果資料因為前面的 Sort 運算子或因為已排序索引搜尋或掃描,而尚未排序,最佳化工具就會在這個運算子之前使用 Sort 運算子。在 SHOWPLAN_ALL 陳述式或 SQL Server Management Studio 的圖形化執行計畫中,GROUP BY 述詞中的資料行會在 Argument 資料行中列出,而彙總運算式則在 Defined Values 資料行中列出。

Stream Aggregate 是實體運算子。

資料流彙總運算子圖示圖形化執行計畫圖示

範例

下列範例會從 SalesPerson 資料表選取資料,再依據銷售領域彙總 Bonus 和 SalesYTD 資料行的值。執行計畫的輸出顯示,查詢最佳化工具會使用 Stream Aggregate 運算子,依據 TerritoryID 資料行將 SalesPerson 資料表中的資料列分組,然後根據該群組計算 AVG(Bonus) 和 SUM(SalesYTD) 資料行的值。

USE AdventureWorks2008R2;
GO
SET NOCOUNT ON;
GO
SET SHOWPLAN_ALL ON;
GO
SELECT TerritoryID, 
    AVG(Bonus) AS 'Average bonus', 
    SUM(SalesYTD) AS'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO
SET SHOWPLAN_ALL OFF;

Stream Aggregate 運算子的執行計畫輸出顯示在下面。

StmtText

------------------------------------------------------------------------------------------------

|--Stream Aggregate(GROUP BY:([AdventureWorks2008R2].[Sales].[SalesPerson].[TerritoryID]) )

DEFINE:([Expr1011]=Count(*),

[Expr1012]= SUM([AdventureWorks2008R2].[Sales].[SalesPerson].[Bonus]),

[Expr1004]=SUM([AdventureWorks2008R2].[Sales].[SalesPerson].[SalesYTD])))

Argument

-----------------------------------------------------------------------------------------------

GROUP BY:([AdventureWorks2008R2].[Sales].[SalesPerson].[TerritoryID]

DefinedValues

----------------------------------------------------------------------------------------------

[Expr1011]=Count(*),

[Expr1012]=SUM([AdventureWorks2008R2].[Sales].[SalesPerson].[Bonus]),

[Expr1004]=SUM([AdventureWorks2008R2].[Sales].[SalesPerson].[SalesYTD])