次の方法で共有


Stream Aggregate プラン表示操作

Stream Aggregate 操作は、1 つ以上の列を基準にして行をグループ化し、クエリから返される 1 つ以上の集計式を計算します。この操作の出力は、クエリ内のその後の操作から参照することも、クライアントに返すことも、あるいはその両方を行うこともできます。Stream Aggregate 操作を使用するには、グループ内で列を基準にして入力を並べ替えておく必要があります。並べ替えられたインデックスのシークまたはスキャンが原因で、または前の Sort 操作が原因でデータがまだ並べ替えられていない場合は、オプティマイザによって、この操作の前に Sort 操作が使用されます。SQL Server Management Studio の SHOWPLAN_ALL ステートメントまたはグラフィカルな実行プランで、GROUP BY 述語の列は Argument 列に一覧表示され、集計式は DefinedValues 列に一覧表示されます。

Stream Aggregate は物理操作です。

Stream Aggregate 操作アイコングラフィカルな実行プランのアイコン

次の例では、SalesPerson テーブルからデータを選択し、Bonus 列および SalesYTD 列の値を地域ごとに集計します。実行プランの出力では、クエリ オプティマイザが Stream Aggregate 操作を使用して、TerritoryID 列を基準にして SalesPerson テーブルの行をグループ化し、そのグループ分けに基づいて 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])