資料流彙總 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])