Stream Aggregate Showplan 运算符

Stream Aggregate 运算符按一列或多列对行分组,然后计算查询返回的一个或多个聚合表达式。此运算符的输出可供查询中的后续运算符引用和/或返回到客户端。Stream Aggregate 运算符要求输入在组中按列进行排序。如果由于前面的 Sort 运算符或已排序的索引查找或扫描导致数据尚未排序,优化器将在此运算符前面使用一个 Sort 运算符。在 SHOWPLAN_ALL 语句或 SQL Server Management Studio 的图形执行计划中,GROUP BY 谓词中的列会列在 Argument 列中,而聚合表达式列在 Defined Values 列中。

Stream Aggregate 是一个物理运算符。

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])