Unter der Annahme, die folgenden:SQL Server Indexverwendung Frage
/*
drop index ix_vouchers_nacsz on dbo.vouchers;
drop index ix_vouchers_nacsz2 on dbo.vouchers;
create index ix_vouchers_nacsz on dbo.Vouchers(
FirstName, LastName,
Address, Address2, City,
State, Zip, Email
);
create index ix_vouchers_nacsz2 on dbo.Vouchers(
Email, FirstName, LastName,
Address, Address2, City,
State, Zip
);
*/
select count(firstname) from vouchers
with (index(ix_vouchers_nacsz))
where
firstname = 'chris' and
lastname = '' and
address = '' and
address2 = '' and
city = '' and
state = '' and
zip = ''
select count(firstname) from vouchers
with (index(ix_vouchers_nacsz2))
where
firstname = 'chris' and
lastname = '' and
address = '' and
address2 = '' and
city = '' and
state = '' and
zip = ''
Warum das zweite Index Ergebnis in einem Index-Scan, während die ersten Ergebnisse in einem Index suchen? Welchen Unterschied macht die Reihenfolge der Schlüssel?
ausgezeichneter Punkt, ja, die Einbeziehung der Spalte "E-Mail" in den Index, der nie verwendet wird macht es für diese Abfrage unbrauchbar –
Ich habe eine andere Abfrage, die die E-Mail-Spalte verwendet. Ich habe diesen Index in der Hoffnung hinzugefügt, dass beide Abfragen ihn dann verwenden könnten, anstatt zwei große Indizes zu haben. Sollte ich stattdessen nur zwei Indizes erstellen? – Chris
Basierend auf den Informationen in der Frage, würde ich zwei Indizes für (Vorname, Nachname) und (E-Mail) erstellen. Diese Indizes sollten eine Zeile fast eindeutig identifizieren. – Andomar