Unterschied zwischen der Suche nach gruppierten Indizes und der Suche nach nicht gruppierten Indizes

10

Was ist der Unterschied zwischen der Suche nach Clustered Index (CI) und der Suche nach Non Clustered Index (NCI)? Ist einer besser als der andere?

Der Grund, warum ich das frage, ist, dass ich eine Tabelle mit 50 Millionen Zeilen und 150 Spalten habe. Es hat eine Spalte mit dem Namen IDClustered Index. Es gibt ein weiteres NCI mit derselben Indexschlüssel-ID und sieben include-d-Spalten. Es scheint mir, dass der NC-Index hier ein Duplikat ist und sicher gelöscht werden kann.

Ich möchte also einige Expertenmeinungen / Ratschläge, wenn es sicher fallen gelassen werden kann oder intakt bleiben soll.

SQLPRODDBA
quelle
Wollen Sie damit sagen, dass ALLE Spalten im Index ohne Cluster enthalten sind?
Ian Ringrose
Nein. Die Tabelle enthält 150 Spalten mit einer als CI definierten ID-Spalte und einen NCI-Index mit einer weiteren ID-Spalte als Indexschlüssel und 7 weiteren Spalten in include.
SQLPRODDBA
Dann scheint Paul White die richtige Antwort gegeben zu haben, aber ich frage mich, ob Sie die "Basis" -Tabelle von einer gruppierten Tabelle in einen Heap ändern sollten. Oder teilen Sie die Tabelle auf, je nachdem, wie oft verschiedene Spalten aktualisiert werden, um die Kosten für die Transaktionsprotokollierung zu senken.
Ian Ringrose

Antworten:

26

Ein nicht gruppierter Index mit denselben Schlüsseln * wie der gruppierte Index kann weiterhin nützlich sein, da der nicht gruppierte Index normalerweise kleiner und dichter ist. Denken Sie daran, dass ein Clustered-Index alle In-Row-Daten enthält, sodass er normalerweise der breiteste (am wenigsten dichte) Index ist.

* Dieselben Schlüsselspalten in derselben Reihenfolge wurden auf dieselbe Weise sortiert (auf / ab).

Bei einer Singleton-Suche (eine Suche unter Verwendung eines Gleichheitsprädikats in einem eindeutigen Index) besteht der Hauptunterschied in der angenommenen größeren Wahrscheinlichkeit, dass die Indexseite (n) benötigt wird, um festzustellen, dass sich dieser einzelne Datensatz bereits im Speicher befindet. Wenn alle Dinge gleich sind, hat ein nicht gruppierter Index mit 100 Seiten eine bessere Chance als ein gruppierter Index, der auf 10.000 Seiten gespeichert ist.

Für jede andere Art der Suche außer einem Singleton gibt es auch eine Scan-Komponente. Der Scanbereich profitiert auch von der größeren Dichte des nicht gruppierten Index (mehr Zeilen pro Seite). Selbst wenn die Seiten aus einem dauerhaften Speicher stammen müssen, ist das Lesen weniger Seiten schneller.

Sie sollten die Systemdokumentation überprüfen, die Person, die den Index hinzugefügt hat, fragen und / oder nach Codekommentaren suchen, um zu verstehen, warum dieser Index vorhanden ist. Sie müssen auch die vollständigen Indexdefinitionen einschließlich der Komprimierung sorgfältig prüfen und sich die Indexwartungsskripte ansehen. Es kann andere besondere Gründe für den nicht gruppierten Index geben (z. B. die Möglichkeit, online neu zu erstellen).

Paul White 9
quelle