Поделиться через


Оператор 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 AdventureWorks;
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:([AdventureWorks].[Sales].[SalesPerson].[TerritoryID]) )
        DEFINE:([Expr1011]=Count(*), 
                [Expr1012]= SUM([AdventureWorks].[Sales].[SalesPerson].[Bonus]), 
                [Expr1004]=SUM([AdventureWorks].[Sales].[SalesPerson].[SalesYTD])))

Argument
-----------------------------------------------------------------------------------------------
GROUP BY:([AdventureWorks].[Sales].[SalesPerson].[TerritoryID]

DefinedValues
----------------------------------------------------------------------------------------------
[Expr1011]=Count(*), 
[Expr1012]=SUM([AdventureWorks].[Sales].[SalesPerson].[Bonus]),
[Expr1004]=SUM([AdventureWorks].[Sales].[SalesPerson].[SalesYTD])