Ich habe diese use-the-index-luke.com gelesen, die ausführlich erklärt, wie Indizes funktionieren. Eines der Dinge, die diese Person wiederholt hat, ist, dass die Reihenfolge der Indizes sehr wichtig ist. Um die Abfrage schnell zu machen, sollten die Spalten der where-Klausel mit denen im Index identisch sein. Heute habe ich diese Theorie nur bestätigt und eine Tabelle (id int, name nvarchar (100)) unter SQL Server 2008 erstellt. Ich habe etwa 5000 Zeilen eingefügt und einen Index erstellt
create index abc on test (name, id )
und feuerte die Abfrage
select ID, name
from test
where ID = 10
and name = '10'
Ich hatte erwartet, dass auf einen vollständigen Tabellenscan eine Auswahl im Abfrageplan folgt, aber zu meiner Überraschung war die Ausgabe des Plans ein Index-Scan, gefolgt von Auswahl.
Meine Frage ist also, ob die Reihenfolge der Spalten in der Where-Klausel von Bedeutung ist oder ob SQL Server sie gemäß der Indexdefinition neu anordnet.
Vielen Dank !!
quelle
Antworten:
Nein. Die Reihenfolge der Spalten in der
WHERE
Klausel spielt überhaupt keine Rolle.quelle
Zunächst wurde die
DROP
Anweisung im Abfragefenster eindeutig nicht ausgeführt, aber zur Erklärung werde ich versuchen, Ihre Fragen zu beantworten.Stellen Sie sich Indizes wie ein Telefonbuch vor: Die Einträge werden nach Nachname und dann nach Vorname sortiert. (Dies ist die Reihenfolge der Indexschlüssel .)
Wenn ich Sie auffordere, alle Telefonnummern von Personen mit dem Nachnamen "Davis" zu finden, blättern Sie auf die entsprechende Seite und lesen die Nummern ab. (Dies ist eine Indexsuche .)
Wenn ich Sie bitte, alle Telefonnummern von Personen mit dem Vornamen "Janice" zu finden, müssten Sie sich jede Seite ansehen, um alle zu finden. (Dies ist ein Index- Scan .)
Wenn ich Ihnen sowohl einen Vor- als auch einen Nachnamen gebe, können Sie diesen Eintrag sehr schnell finden, genau wie im ersten Beispiel, da es offensichtlich ist, dass Sie den Nachnamen verwenden würden, um die richtige Seite und dann den Vornamen zu finden Finde den genauen Eintrag. Es wäre egal, in welcher Reihenfolge ich Ihnen die Informationen gegeben habe, solange ich Ihnen sowohl einen Vor- als auch einen Nachnamen gegeben habe.
Das SQL Server-Abfrageoptimierungsprogramm funktioniert genauso. Basierend auf der Indexschlüsselreihenfolge wird automatisch die effizienteste Methode zum Abrufen der von Ihnen angeforderten Daten ermittelt, unabhängig von der Reihenfolge der Bedingungen in der
WHERE
Klausel.quelle
Die Reihenfolge der Spalten im Index ist wichtig, jedoch nicht in der Reihenfolge der anded-Werte in der
where
Klausel.quelle