インデックス キー列は、インデックスの B ツリーの一部です。列は含まれていません。
2 つのインデックスを取る:
CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)
index1
この種のクエリに適しています:
SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z
一方、index2
この種のクエリに適しています:
SELECT col2, col3 FROM table1 WHERE col1 = x
最初のクエリでは、index1
対象の行をすばやく識別するメカニズムを提供します。クエリは (おそらく) インデックス シークとして実行され、その後、行全体を取得するためのブックマーク ルックアップが続きます。
2 番目のクエリでは、index2
カバーインデックスとして機能します。インデックスは、クエリを満たすために必要なすべてのデータを提供するため、SQL Server はベース テーブルにヒットする必要はまったくありません。 index1
この場合、カバーインデックスとしても機能します。
カバリング インデックスが必要だが、すべての列をシークしないため、または許可されたデータ型 (XML など) ではないために追加できないため、すべての列を B ツリーに追加したくない場合は、 INCLUDE 句。