Sollte die Reihenfolge der Spalten in der where-Klausel mit der Indexreihenfolge übereinstimmen?

8

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. Abfrageplan

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 !!

Egalitär
quelle
3
Beantwortet der Ausführungsplan Ihres Tests nicht die Frage?
Ypercubeᵀᴹ
Ja !! Aber ich wollte eine Expertenmeinung und in Fällen kann dies fehlschlagen. Vielen Dank !!
Egalitär
1
Ähnliche Frage für MySQL: Beeinflusst die Reihenfolge der Spalten in einer WHERE-Klausel in MySQL die Abfrageleistung? Der Optimierer von SQL-Server ist einige Stufen höher als der von MySQL.
Ypercubeᵀᴹ

Antworten:

13

Meine Frage ist also, ob die Reihenfolge der Spalten in der Where-Klausel von Bedeutung ist

Nein. Die Reihenfolge der Spalten in der WHEREKlausel spielt überhaupt keine Rolle.

ein Pferd ohne Name
quelle
10

Zunächst wurde die DROPAnweisung 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 WHEREKlausel.

Jon Seigel
quelle
Tolle Erklärung zu Index-Scan und Index-Suche.
Neelam
0

Die Reihenfolge der Spalten im Index ist wichtig, jedoch nicht in der Reihenfolge der anded-Werte in der whereKlausel.

Gaston Sanchez
quelle