-
「JOIN.sql」を SQL Server Management Studio で開く

-
前準備を実行する

-
クラスタ化インデックス(主キー)のみで結合してみる


Software-NUMA の設定を行っているため、分散クエリーになっているので、少々わかりにくい
-
同じクエリーを MAXDOP 1 にして実行してみる


クラスタ化インデックスのスキャンと Hash Match アグリゲーションが発生しているため、非常にコストが高いことが想像できる
-
まずは CHARGE テーブルのカバリング・インデックスを作成する
検索条件や結合条件から

で作成し、実行プランを確認する

作成した IX_CHARGE_COVER インデックスが使用されていることがわかる
-
つぎに PREFECTURE テーブルにカバリング・インデックスを作成する
検索条件や結合条件から

で作成し、実行プランを確認する

作成した IX_PREFECTURE_COVER インデックスが使用されているのがわかる
-
次に VENDER テーブルにカバリング・インデックス + INCLUDE オプションのインデックスを作成する
検索条件、結合条件、抽出項目から

で作成し、実行プランを確認する

作成した IX_VENDER_COVER インデックスが使用されていることがわかる
-
次に MEMBER テーブルにカバリング・インデックス + INCLUDE オプションのインデックスを作成する
検索条件、結合条件、抽出項目から

で作成し、実行プランを確認する

作成した IX_MEMBER_COVER インデックスが使用されていることがわかる
-
最後に STATEMENT テーブルにカバリング・インデックス + INCLUDE オプションのインデックスを作成する
検索条件、結合条件、抽出項目から

で作成し、実行プランを確認する

作成した IX_STATEMENT_COVER インデックスが使用されていることがわかる
-
結論
検索条件、結合条件、抽出項目で必要なカバリング・インデックスを作成する
ただし、項目の順番を間違うと最適なパフォーマンスが得られない
どの項目をどの順番で作成すればいいのかわからない場合は、次の記事を参考にするように