2008-09-03 12 views
8

In SQL Server 2005 hat mir der Abfrageanalysator viele Male gesagt, dass ich einen nicht gruppierten Index für eine primäre ID-Spalte einer Tabelle erstellen soll, die bereits einen gruppierten Index enthält. Wenn Sie dieser Empfehlung folgen, meldet der Abfrageausführungsplan, dass die Abfrage schneller sein soll.Nicht geclusterter Index in einer Clustered-Index-Spalte verbessert die Leistung?

Warum sollte ein Non-Clustered-Index in derselben Spalte (mit derselben Sortierreihenfolge) schneller sein als ein Clustered-Index?

Antwort

-1

Ein Clustered-Index ist im Allgemeinen schneller, aber Sie können nur 1 Clustered-Index haben. Wenn also die Tabelle bereits einen gruppierten Index für eine andere Spalte enthält, ist ein nicht gruppierter Index das Beste, was Sie tun können.

2

Ich denke, es wäre schneller in Fällen, in denen Sie nicht die vollständigen Zeilendaten benötigen, zum Beispiel wenn Sie nur überprüfen, ob eine Zeile mit einer bestimmten ID existiert. Dann wäre ein gruppierter Index ziemlich groß, während ein kleiner Index "eine Spalte" viel schlanker wäre.

16

Ein gruppierter Index enthält alle Daten für die Tabelle, während ein nicht gruppierter Index nur die Spalte + den Speicherort des gruppierten Index oder die Zeile enthält, wenn sie sich in einem Heap befindet (eine Tabelle ohne Clustered-Index). Wenn Sie also eine Zählung (Spalte) durchführen und diese Spalte mit einem nicht gruppierten Index indexiert wird, muss der SQL Server nur den nicht gruppierten Index scannen, der schneller als der gruppierte Index ist, weil mehr auf 8K Seiten passen wird

Verwandte Themen