実行プランの読み方をまとめてみる - その4 ( Stream Aggregrate について説明してみる ) -
今日から来年 1/3 までお休みです。今日は家でまったりです。いい天気ですねー♪
東京も初霜、初氷、やっとで冬になったという感じですね。しかし、年明けから徐々に春な感じになりそうです。
今回は、Stream aggregrate を取り上げたいと思います。下図のようなオペレーターです。
まず下記のクエリを SQL Server Management Studio で実行しましょう。(実行プランも表示するようにしてください。)
SELECT SalesPersonID, COUNT(SalesPersonID) FROM Sales.SalesOrderHeader GROUP BY SalesPersonID
Aggregrate(アグリゲート) は、その意味の通り集計です。Stream Aggregrate は、GROUP BY に指定するキーでデータがソートされている場合に発生します。今回のクエリでは、下図のように動作します。
- 対象データを IX_SalesOrderHeader_SalesPersonID をインデックススキャンし、SalesPersonID で並び替えられた状態でデータを取得します。
- 取得したデータを SalesPersonID 単位 ( Group By )に COUNT していきます。どのようなデータを返すかは、Output List を見れば判断できます。SalesPersonID と Expr1005 です。Expr1005 は定義済の値を参照することでどのようなことをしているのか判断できます。
[Expr1005] = Scalar Operator(COUNT([AdventureWorks2016CTP3].[Sales].[SalesOrderHeader].[SalesPersonID]))
上記の通り、SalesPersonID をカウントしたものを値に格納していることがわかります。
- 集計したデータを型変換し、結果を返します。どのようなデータを返すかは、Output List を見れば判断できます。SalesPersonID と Expr1002 です。どのように型変換を行っているかは、定義済の値を参照することで判断できます。
[Expr1002] = Scalar Operator(CONVERT_IMPLICIT(int,[Expr1005],0))
上記の通り、COUNT した値(Expr1005)を int 型に変換していることが判断できます。
今年は、記事の投稿はあと一つ。
※携帯保証使って、携帯新しくなったのでケースも新調したいなぁ。