SQL Serverのパフォーマンスを向上させるために、2つ以上のテーブルのJOIN結果にインデックスを付ける方法


9

私はインデックス作成に慣れていないため、インデックス作成の基本を学びました。対応するテーブルのインデックス部分内にある主キー制約のデフォルトのクラスター化インデックスを見つけることができますが、外部キー制約を作成した後は見つかりません。

これで、パフォーマンスを向上させるためにインデクシングを実装する必要があるという要件があります。JOINの結果のパフォーマンスを向上させるために、外部キーのインデックス付けについて読みました。

外部キー列を追加の非クラスター化インデックスに追加する必要がありますか、それとも外部キーにデフォルトのインデックスがありますか?

SQLテーブルの構造が次のようで、t1_col3を使用してWHERE句含むJOINクエリ実行している場合、どのようにして効率的にインデックスを実装できます

               table1                       table2
               ------                       ------
               t1_col1(pk)                  t2_col1(pk)
               t1_col2                      t2_col2
               t1_col3                      t2_col3
               t1_col4                      t2_col4
               t2_col1(FK)

回答:


13

外部キーには、デフォルトではインデックスがありません。作成する必要があります。

この場合は、どちらかをお勧めします。2つのカラムの相対的な選択性に依存します

CREATE INDEX IX_table2fk ON
              table1 (t2_col1, t1_col3)
              INCLUDE (any columns needed for the query)

または

CREATE INDEX IX_table2fk ON
              table1 (t1_col3, t2_col1)
              INCLUDE (any columns needed for the query)

INCLUDEは、インデックスをカバーして、キー/ブックマークの検索を回避します


1
インクルードはSQL-Server 2005の新機能
でした。Sql

@bernd_k:わずか6年と3バージョン前:-)
gbn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.