Sie wollen an Sicherheit grenzender Wahrscheinlichkeit einen Clustered-Index für jede Tabelle in der Datenbank zu etablieren. Wenn eine Tabelle keinen Clustered-Index hat, handelt es sich um einen sogenannten "Heap", und die Leistung der meisten gängigen Abfragen ist less for a heap than for a clustered index table.
Welche Felder für den Clustered-Index festgelegt werden müssen, hängt von der Tabelle selbst und den erwarteten Verwendungsmustern von Abfragen für die Tabelle ab. In fast allen Fällen möchten Sie wahrscheinlich, dass sich der Clustered-Index in einer Spalte oder einer Kombination von Spalten befindet, die eindeutig ist, dh (ein alternativer Schlüssel), denn wenn dies nicht der Fall ist, fügt SQL einen eindeutigen Wert am Ende von was auch immer hinzu Felder, die Sie trotzdem auswählen. Wenn in Ihrer Tabelle Spalten oder Spalten enthalten sind, die häufig von Abfragen verwendet werden, um mehrere Datensätze auszuwählen oder zu filtern (z. B. wenn Ihre Tabelle Verkaufstransaktionen enthält und Ihre Anwendung häufig Verkaufstransaktionen nach Produkt-ID oder noch besser anfordert, eine Tabelle mit Rechnungsdetails, in der Sie in fast jedem Fall alle Detailsätze für eine bestimmte Rechnung oder eine Rechnungstabelle abrufen, in der Sie häufig alle Rechnungen für einen bestimmten Kunden abrufen ... Dies gilt unabhängig davon, ob Sie als Großbuchstabe ausgewählt werden Anzahl der Datensätze nach einem einzelnen Wert oder nach einem Bereich von Werten)
Diese Spalten sind Kandidaten für den Clustered-Index. Die Reihenfolge der Spalten im Clustered-Index ist kritisch. Die erste im Index definierte Spalte sollte die Spalte sein, die in den erwarteten Abfragen zuerst ausgewählt oder gefiltert wird.
Der Grund für all dies basiert auf dem Verständnis der internen Struktur eines Datenbankindex. Diese Indizes werden Balanced-Tree-Indizes (B-Tree) genannt. Sie sind irgendwie wie ein Binärbaum, außer dass jeder Knoten im Baum eine beliebige Anzahl von Einträgen (und Kindknoten) statt nur zwei haben kann. Was einen Clustered-Index unterscheidet, ist, dass die Blattknoten in einem Clustered-Index die tatsächlichen Datenseite der physischen Festplatte der Tabelle selbst sind. während die Blattknoten des nicht geclusterten Index nur auf die Datenseiten der Tabellen "zeigen".
Wenn eine Tabelle einen clustered-Index enthält, sind die Datenseiten der Tabellen daher die Blattebene dieses Index, und jeder hat einen Zeiger auf die vorherige Seite und die nächste Seite in der Indexreihenfolge (sie bilden eine doppelt verknüpfte Liste).
Wenn Ihre Abfrage also einen Zeilenbereich anfordert, der in der gleichen Reihenfolge wie der Clustered Index liegt ... muss der Prozessor den Index nur einmal (oder vielleicht zweimal) durchlaufen, um die Startseite der Daten zu finden. und folgen Sie dann den verketteten Listenzeigern, um zur nächsten Seite und zur nächsten Seite zu gelangen, bis sie alle Datenseiten gelesen hat, die sie benötigt.
Bei einem nicht gruppierten Index muss er den Index für jede Zeile, die er abruft, einmal durchqueren ...
HINWEIS: EDIT
Um das sequentielle Problem für Guid Key-Spalten zu adressieren, beachten Sie, dass SQL2k5 hat NEWSEQUENTIALID(), die tatsächlich Guids die "alte" sequenzielle Weise generiert.
oder Sie können Jimmy Nielsens KAMM guid algotithm untersuchen, die in Client-Seite Code implementiert wird:
COMB Guids
Werfen Sie einen Blick auf den folgenden Beitrag von Paul Randal. [Clustered oder Nonclustered-Index für eine zufällige GUID?] (Http://www.sqlskills.com/blogs/paul/clustered-or-nonclustered-index-on-a-random-guid/) – Lijo