Оператор Stream Aggregate инструкции Showplan

Оператор Stream Aggregate группирует строки в один или несколько столбцов и вычисляет одно или несколько статистических выражений, возвращенных запросом. Выход этого оператора может быть использован последующими операторами запроса, возвращен клиенту или то и другое. Оператору Stream Aggregate необходимы входные данные, упорядоченные по группируемым столбцам. Оптимизатор использует перед этим оператором оператор Sort, если данные не были отсортированы оператором Sort или используется упорядоченный поиск или просмотр в индексе. В инструкции SHOWPLAN_ALL или графическом плане выполнения в среде Среда SQL Server Management Studio столбцы в предикате GROUP BY перечисляются в столбце «Аргумент», а статистические выражения — в столбце «Определенные значения».

Stream Aggregate является физическим оператором.

Значок оператора Stream aggregateЗначок графических планов выполнения

Примеры

В следующем примере производится выборка данных из таблицы SalesPerson и статистическая обработка значений столбцов Bonus и SalesYTD по территориальному признаку. Выход плана выполнения показывает, что для того, чтобы сгруппировать строки в таблице SalesPerson по столбцу TerritoryID, оптимизатор запросов использует оператор Stream Aggregate, а затем вычисляет значения для столбцов 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])))

Аргумент

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

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

DefinedValues

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

[Expr1011]=Count(*),

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

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