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