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