Ich habe nur begrenzte Erfahrung mit DB und habe DB nur als Anwendungsprogrammierer verwendet. Ich möchte etwas über "geclusterte" und "nicht geclusterte Indizes" wissen. Ich habe gegoogelt, und was ich gefunden habe, war:
Ein geclusterter Index ist ein spezieller Index-Typ, der die Reihenfolge der Datensätze in der Tabelle sind physisch gespeichert werden. Daher kann eine Tabelle nur einen geclusterten Index haben. Die Blattknoten eines geclusterten Index enthalten die Daten Seiten. Ein nonclustered index ist ein spezielle Art von Index, bei dem die logische Reihenfolge des Indexes nicht nicht mit der physisch gespeicherten Reihenfolge der der Zeilen auf der Festplatte. Der Blattknoten eines nonclustered index besteht nicht aus den Datenseiten. Stattdessen enthalten die Blatt Knoten Indexzeilen enthalten.
Was ich in SO gefunden habe, war https://stackoverflow.com/questions/91688/what-are-the-differencespros-cons-between-clustered-and-non-clustered-indexes.
Kann mir jemand das in einfachem Englisch erklären?
Bei einem geclusterten Index werden die Zeilen physisch auf der Festplatte in der gleichen Reihenfolge wie der Index gespeichert. Daher kann es nur einen geclusterten Index geben.
Bei einem nicht geclusterten Index gibt es eine zweite Liste, die Zeiger auf die physischen Zeilen enthält. Sie können viele nicht geclusterte Indizes haben, obwohl jeder neue Index die Zeit erhöht, die für das Schreiben neuer Datensätze benötigt wird.
Im Allgemeinen ist es schneller, aus einem geclusterten Index zu lesen, wenn Sie alle Spalten abrufen wollen. Sie müssen nicht erst auf den Index und dann auf die Tabelle zugreifen.
Das Schreiben in eine Tabelle mit einem geclusterten Index kann langsamer sein, wenn die Daten neu angeordnet werden müssen.
Ein geclusterter Index bedeutet, dass Sie die Datenbank anweisen, nahe beieinander liegende Werte auf dem Datenträger zu speichern. Dies hat den Vorteil, dass Datensätze, die in einen bestimmten Bereich von geclusterten Indexwerten fallen, schnell gescannt und abgerufen werden können.
Ein Beispiel: Sie haben zwei Tabellen, Kunde und Auftrag:
Customer
----------
ID
Name
Address
Order
----------
ID
CustomerID
Price
Wenn Sie schnell alle Bestellungen eines bestimmten Kunden abrufen möchten, können Sie einen geclusterten Index auf der Spalte "CustomerID" der Tabelle Order erstellen. Auf diese Weise werden die Datensätze mit derselben Kunden-ID physisch nahe beieinander auf der Festplatte gespeichert (geclustert), was ihren Abruf beschleunigt.
P.S. Der Index auf CustomerID wird natürlich nicht eindeutig sein, so dass Sie entweder ein zweites Feld hinzufügen müssen, um den Index "eindeutig" zu machen, oder die Datenbank dies für Sie erledigen lassen, aber das ist eine andere Geschichte.
Bezüglich mehrerer Indizes. Sie können nur einen geclusterten Index pro Tabelle haben, da dieser definiert, wie die Daten physisch angeordnet sind. Wenn Sie eine Analogie wünschen, stellen Sie sich einen großen Raum mit vielen Tabellen darin vor. Sie können diese Tische entweder zu mehreren Reihen anordnen oder sie alle zu einem großen Konferenztisch zusammenstellen, aber nicht beides gleichzeitig. Eine Tabelle kann weitere Indizes haben, die dann auf die Einträge im Cluster-Index verweisen, der wiederum angibt, wo die eigentlichen Daten zu finden sind.
Eine einfache, nicht-technische Faustregel besagt, dass geclusterte Indizes in der Regel für den Primärschlüssel (oder zumindest für eine eindeutige Spalte) verwendet werden und dass nicht-geclusterte Indizes für andere Situationen verwendet werden (z. B. für einen Fremdschlüssel). In der Tat erstellt SQL Server standardmäßig einen geclusterten Index für Ihre Primärschlüsselspalte(n). Wie Sie gelernt haben, bezieht sich der clustered index auf die Art und Weise, wie die Daten physisch auf der Festplatte sortiert werden, was bedeutet, dass er für die meisten Situationen eine gute Wahl ist.