Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie wichtig ist die Reihenfolge der Spalten in Indizes?

Sehen Sie sich einen Index wie diesen an:

Cols
  1   2   3
-------------
|   | 1 |   |
| A |---|   |
|   | 2 |   |
|---|---|   |
|   |   |   |
|   | 1 | 9 |
| B |   |   |
|   |---|   |
|   | 2 |   |
|   |---|   |
|   | 3 |   |
|---|---|   |

Sehen Sie, wie die Beschränkung auf A zuerst, da Ihre erste Spalte mehr Ergebnisse eliminiert, als die Beschränkung auf Ihre zweite Spalte zuerst? Es ist einfacher, wenn Sie sich vorstellen, wie der Index durchlaufen werden muss, Spalte 1, dann Spalte 2 usw. Sie sehen, dass das Abschneiden der meisten Ergebnisse im ersten Durchgang den 2. Schritt viel schneller macht.

Ein anderer Fall:Wenn Sie Spalte 3 abgefragt haben, würde der Optimierer nicht einmal den Index verwenden, da er überhaupt nicht hilfreich ist, um die Ergebnismengen einzugrenzen. Jedes Mal, wenn Sie sich in einer Abfrage befinden, bedeutet das Eingrenzen der Anzahl der zu verarbeitenden Ergebnisse vor dem nächsten Schritt eine bessere Leistung.

Da der Index auch auf diese Weise gespeichert wird, gibt es kein Zurückverfolgen über den Index, um die erste Spalte zu finden, wenn Sie sie abfragen.

Kurz gesagt:Nein, es ist keine Show, es gibt echte Leistungsvorteile.