実行プランの読み方をまとめてみる - その5 ( Hash Aggregrate について説明してみる ) -
年末は飲んだくれるために買いました。プレモル美味しいですよね。
- 出版社/メーカー: サントリー
- メディア: 食品&飲料
- この商品を含むブログを見る
朝から、一杯やりながら記事を書く...年末ならでは。(なのか?)
前回、Stream Aggregate を説明したので、今回は同じ集計操作である、Hash Aggregrate について説明します。
ryuchan.hatenablog.com
早速、下記のクエリを SQL Server Management Studio で実行してみましょう。
SELECT ModifiedDate, COUNT(ModifiedDate) FROM Sales.SalesOrderHeader GROUP BY ModifiedDate
Stream Aggregate 同様、集計操作です。異なるのは、GROUP BY に指定するキーでデータがソートされて "いない" 場合に発生します。前回説明した Stream Aggregate の例では SalesPersonID できちんと並び替えられていることが下図の通り判断できます。
今回のクエリでは、下図のように動作します。
- 対象データを PK_SalesOrderHeader_SalesOrderID をクラスタインデックススキャンし、並び替えのされてない状態でデータを取得します。
- 取得したデータは並び替えがされていないため ModifiedDate キー (どの値を Hash テーブルのキーにするかは、プロパティ→ Hash Key Build を参照) にした Hash テーブルをメモリ中に作成し、ModifiedDate の数を COUNT していきます。どのようなデータを返すかは、Output List を見れば判断できます。ModifiedDate と Expr1005 です。Expr1005 は定義済の値を参照することでどのようなことをしているのか判断できます。
[Expr1005] = Scalar Operator(COUNT(*))
上記の通り COUNT(*) となっているので、PK_SalesOrderHeader_SalesOrderID でクラスタインデックススキャンになっていることが判断でき、カウントしたものを Expr1005 に格納していることが判断できます。
- 集計したデータを型変換し、結果を返します。どのようなデータを返すかは、Output List を見れば判断できます。ModifiedDate と Expr1002 です。どのように型変換を行っているかは、定義済の値を参照することで判断できます。
[Expr1002] = Scalar Operator(CONVERT_IMPLICIT(int,[Expr1005],0))
上記の通り、COUNT した値(Expr1005)を int 型に変換していることが判断できます。
※申歳のバージョンもありますね。
サントリー ザ・プレミアム・モルツ 2016干支デザイン缶 申歳 350ml×24本
- 出版社/メーカー: サントリー
- 発売日: 2015/12/22
- メディア: 食品&飲料
- この商品を含むブログを見る
サントリー 香るプレミアム 2016干支デザイン缶 申歳 350ml×24本
- 出版社/メーカー: サントリー
- 発売日: 2015/12/22
- メディア: 食品&飲料
- この商品を含むブログを見る
なぜザ・プレミアム・モルツは売れ続けるのか? (小学館文庫)
- 作者: 片山修
- 出版社/メーカー: 小学館
- 発売日: 2012/06/06
- メディア: 文庫
- 購入: 1人 クリック: 1回
- この商品を含むブログ (2件) を見る