In der ersten wird Column2
zum Indexschlüssel hinzugefügt. Im zweiten Fall ist es nicht möglich, (*) dem Schlüssel hinzuzufügen. In diesem Fall wird er nur in den Indexblattseiten angezeigt. Dadurch kann der Index nach Column1
durchsucht werden, Sie müssen jedoch nicht zur Basistabelle (bookmark lookup/key lookup) zurückkehren, um den Wert für Column2
abzurufen.
dh es index2 „Abdeckung“ für Anfragen wie
SELECT Column1,Column2
FROM [dbo].[MyTable]
WHERE Column1 = 'X'
macht Und es deckt Abfragen auch wie
SELECT Column1,Column2
FROM [dbo].[MyTable]
WHERE Column1 = 'X' AND Column2 = 'Y'
Aber index1 kann auch eine bessere Leistung für die zweite Abfrage, da sie suchen können auf den beiden Spalten direkt (im Gegensatz zu nur auf Column1
suchen können, dann müssen alle übereinstimmenden Zeilen auf der Indexblatt Ebene zu prüfen, ob sie das Column2
Prädikat erfüllen). Wenn Column2
niemals als Suchprädikat für diesen Index verwendet wird und Ihre Abfragen für diesen Index nicht von Column2
bestellt werden, dann sollte es als INCLUDE
-d Spalte hinzugefügt werden, um die Größe des Schlüssels niedrig zu halten und die Anzahl zu reduzieren Seiten im Index.
(*) Der Grund, warum ich sage, „vielleicht nicht“ oben da ist, wenn Column2
sind (ein Teil) die Clustered-Index Schlüssel es will still be added there anyway für einen nicht gruppierten Index nicht mit der UNIQUE
Option erstellt.
vielen Dank. –