Opérateur Showplan Stream Aggregate

L'opérateur Stream Aggregate effectue un regroupement d'après une ou plusieurs colonnes et calcule une ou plusieurs expressions d'agrégation retournées par la requête. La sortie de cet opérateur peut être référencée par des opérateurs ultérieurs dans la requête, retournés au client, ou les deux. Cet opérateur exige que l'entrée suive l'ordre des colonnes dans ses groupes. L'optimiseur utilise un opérateur de tri avant cet opérateur si les données ne sont pas déjà triées en raison d'un opérateur de tri précédent ou d'une recherche ou d'une analyse d'index triée. Dans l'instruction SHOWPLAN_ALL ou le plan d'exécution graphique dans SQL Server Management Studio, les colonnes du prédicat GROUP BY sont répertoriées dans la colonne Argument, et les expressions d'agrégation sont répertoriées dans la colonne Defined Values.

Stream Aggregate est un opérateur physique.

Icône de l'opérateur Stream AggregateIcône du plan d'exécution graphique

Exemples

L'exemple suivant sélectionne des données de la table SalesPerson et agrège les valeurs pour les colonnes Bonus et SalesYTD par territoire. La sortie du plan d'exécution indique que l'optimiseur de requête utilise l'opérateur Stream Aggregate pour regrouper les lignes dans la table SalesPerson par la colonne TerritoryID, puis calcule les valeurs pour les colonnes AVG(Bonus) et SUM(SalesYTD) en fonction de ce regroupement.

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;

La sortie du plan d'exécution de l'opérateur Stream Aggregate est affichée ci-dessous.

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