都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

そろそろ業務で使いそうなため、カラムストアのお勉強...まではいかないものの、少しづつ色々なものをお試してみる

 先日、カラムストアのお勉強を始めたのですが、業務で使うようにならないと必要に迫られないこともあり、いまいちやる気がおきません。
ryuchan.hatenablog.com

 今日も暑かったので、まずはビール!
f:id:koogucc11:20160731170538j:plain

 ビールサーバーほしいなぁ。けど、これ買っちゃうと休みの日に飲んだくれてしまいそう...

 さて、ビールも飲み終わったのでカラムストアをお試してみます。前回、下記の記事を書きましたが、その中で使用したクエリでカラムストアの実験をしたいと思います。
ryuchan.hatenablog.com

 前回の記事で使用したクエリは下記の通りです。

SELECT 
    [TerritoryID_is_1]  = SUM(CASE WHEN TerritoryID = 1 THEN 1 ELSE 0 END),
    [TerritoryID_is_2]  = SUM(CASE WHEN TerritoryID = 2 THEN 1 ELSE 0 END),
    [TerritoryID_is_3]  = SUM(CASE WHEN TerritoryID = 3 THEN 1 ELSE 0 END),
    [TerritoryID_is_4]  = SUM(CASE WHEN TerritoryID = 4 THEN 1 ELSE 0 END),
    [TerritoryID_is_5]  = SUM(CASE WHEN TerritoryID = 5 THEN 1 ELSE 0 END),
    [TerritoryID_is_6]  = SUM(CASE WHEN TerritoryID = 6 THEN 1 ELSE 0 END),
    [TerritoryID_is_7]  = SUM(CASE WHEN TerritoryID = 7 THEN 1 ELSE 0 END),
    [TerritoryID_is_8]  = SUM(CASE WHEN TerritoryID = 8 THEN 1 ELSE 0 END),
    [TerritoryID_is_9]  = SUM(CASE WHEN TerritoryID = 9 THEN 1 ELSE 0 END),
    [TerritoryID_is_10] = SUM(CASE WHEN TerritoryID = 10 THEN 1 ELSE 0 END)
FROM 
    Sales.SalesOrderHeader

 クエリの内容を見るために、実行プランを取得します。
f:id:koogucc11:20160731172249p:plain

 実行プラン上で右クリックし、実行プランを保存しておきましょう。
f:id:koogucc11:20160731172638p:plain

 Sales.SalesOrderHeader にカラムストアインデックスを下記のように作成してみます。
f:id:koogucc11:20160731172822p:plain

 もう一度下記のクエリを実行してみましょう。実行後に実行プランを保存しておきます。

SELECT 
    [TerritoryID_is_1]  = SUM(CASE WHEN TerritoryID = 1 THEN 1 ELSE 0 END),
    [TerritoryID_is_2]  = SUM(CASE WHEN TerritoryID = 2 THEN 1 ELSE 0 END),
    [TerritoryID_is_3]  = SUM(CASE WHEN TerritoryID = 3 THEN 1 ELSE 0 END),
    [TerritoryID_is_4]  = SUM(CASE WHEN TerritoryID = 4 THEN 1 ELSE 0 END),
    [TerritoryID_is_5]  = SUM(CASE WHEN TerritoryID = 5 THEN 1 ELSE 0 END),
    [TerritoryID_is_6]  = SUM(CASE WHEN TerritoryID = 6 THEN 1 ELSE 0 END),
    [TerritoryID_is_7]  = SUM(CASE WHEN TerritoryID = 7 THEN 1 ELSE 0 END),
    [TerritoryID_is_8]  = SUM(CASE WHEN TerritoryID = 8 THEN 1 ELSE 0 END),
    [TerritoryID_is_9]  = SUM(CASE WHEN TerritoryID = 9 THEN 1 ELSE 0 END),
    [TerritoryID_is_10] = SUM(CASE WHEN TerritoryID = 10 THEN 1 ELSE 0 END)
FROM 
    Sales.SalesOrderHeader

f:id:koogucc11:20160731173027p:plain

 下記の機能を使って、二つの実行プランを比較してみましょう。
ryuchan.hatenablog.com

 下記のような表示になるかと思います。着目すべきは、IO部分でしょう。カラムストアインデックスの IO コストが、通常のインデックスのコストの 1/160 程度ですね。
f:id:koogucc11:20160731174541p:plain

 高速になるのはわかりましたが、メンテナンス性はどうなんでしょうか?次回は、メンテナンス性・その他について実験してみます。

ビールサーバー選択肢が少ないなぁ。どれがいいんでしょ?

グリーンハウス  スタンド型ビールサーバー GH-BEERD-SV

グリーンハウス スタンド型ビールサーバー GH-BEERD-SV