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.
Warum sollte ein Non-Clustered-Index für dieselbe Spalte (mit derselben Sortierreihenfolge) schneller sein als ein Clustered-Index?
Ein gruppierter Index enthält alle Daten für die Tabelle, während ein nicht gruppierter Index nur die Spalte + die Position des gruppierten Indexes oder die Zeile hat, wenn sie sich in einem Heapspeicher befindet (eine Tabelle ohne Clustered-Index). Wenn Sie also eine Zählung (Spalte) durchführen und diese Spalte mit einem nicht gruppierten Index indiziert 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
Ich schätze, es wäre schneller, wenn Sie nicht die vollständigen Zeilendaten benötigen, zum Beispiel wenn Sie nur prü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.
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.
Tags und Links sql-server indexing