Condividi tramite


Operatore Showplan Stream Aggregate

L'operatore Stream Aggregate raggruppa alcune righe in base a una o più colonne e quindi calcola una o più espressioni di aggregazione restituite dalla query. È possibile fare riferimento all'output di questo operatore negli operatori successivi della query, restituirlo al client oppure eseguire entrambe queste operazioni. L'operatore Stream Aggregate richiede che l'input sia ordinato in base alle colonne sulle quali viene eseguito il raggruppamento. Prima di questo operatore, Query Optimizer utilizza un operatore Sort se i dati non sono stati già ordinati tramite un operatore Sort precedente oppure una ricerca o un'analisi di un indice ordinato. Nell'istruzione SHOWPLAN_ALL o nel piano di esecuzione grafico in SQL Server Management Studio le colonne incluse nel predicato GROUP BY sono elencate nella colonna dell'argomento, mentre le espressioni di aggregazione sono elencate nella colonna Defined Values.

Stream Aggregate è un operatore fisico.

Icona dell'operatore Stream AggregateIcona del piano di esecuzione grafico

Esempi

Nell'esempio seguente vengono selezionati alcuni dati della tabella SalesPerson e viene eseguita un'aggregazione dei valori in base al territorio per le colonne Bonus e SalesYTD. L'output del piano di esecuzione indica che Query Optimizer utilizza l'operatore Stream Aggregate per raggruppare le righe della tabella SalesPerson in base alla colonna TerritoryID e quindi calcolare i valori per le colonne AVG(Bonus) e SUM(SalesYTD) in base a tale raggruppamento.

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;

Di seguito è riportato l'output del piano di esecuzione dell'operatore 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])