最初のものColumn2
はインデックスキーに追加されます。2番目の例では、キーに追加されない(*)場合があります。その場合、インデックスリーフページにのみ表示されます。これにより、インデックスを検索できますが、の値を取得するためColumn1
にベーステーブルに戻る必要はありません(ブックマークルックアップ/キールックアップColumn2
) 。
つまり、index2を次のようなクエリの「カバー」にします。
SELECT Column1,Column2
FROM [dbo].[MyTable]
WHERE Column1 = 'X'
また、次のようなクエリもカバーしています
SELECT Column1,Column2
FROM [dbo].[MyTable]
WHERE Column1 = 'X' AND Column2 = 'Y'
ただし、index1は、2つの列を直接検索できるため、2番目のクエリのパフォーマンスが向上する可能性があります(検索のみが可能で、述語Column1
に一致するかどうかを確認するためにインデックスリーフレベルで一致するすべての行を評価する必要があるのとは対照的です)。がそのインデックスに対する検索述語として使用されておらず、そのインデックスに対するクエリが順序付けされてもメリットがない場合Column2
は、キーのサイズを抑えてページ数を減らすために、-d列として追加する必要があります。索引。Column2
Column2
INCLUDE
(*)上記で「できない」と言う理由はColumn2
、クラスター化インデックスキー(の一部)である場合、オプションで作成されていない非クラスター化インデックスに対して、クラスター化インデックスキーが追加されるためです。UNIQUE