Ein Index hilft SQL Server, Daten schnell aus Zeilen abzurufen. Indizes funktionieren wie das Inhaltsverzeichnis am Anfang von Büchern, sodass Sie schnell nachschlagen können, auf welcher Seite sich ein Thema befindet. Ohne Indizes muss SQL Server alle Zeilen in einer Tabelle durchsuchen, um einen Datensatz zu finden.
Es gibt zwei Arten von Indizes in SQL Server: geclusterte und nicht geclusterte. Finden Sie den Unterschied zwischen geclusterten und nicht geclusterten Indizes heraus und warum sie wichtig sind.
Gruppierter Index in SQL Server
In einem Clustered-Index werden Datenzeilen basierend auf dem Schlüsselwert physisch in einer geordneten Weise gespeichert. Da der Index die Tabelle enthält und Zeilen nur in einer Reihenfolge anordnen kann, können Sie nur einen gruppierten Index pro Tabelle erstellen.
Während Indizes das Abrufen von Zeilen in einem Bereich beschleunigen,
INSERT- und UPDATE-Anweisungen kann langsam sein, da der Abfrageoptimierer den Index der Reihe nach durchsucht, bis er den Zielindex findet.Nicht gruppierter Index in SQL Server
Ein nicht gruppierter Index enthält die Schlüsselwerte, deren Eintrag ein Zeiger ist, der als Zeilenlokator bezeichnet wird. Bei Clustered-Tabellen (Tabellen mit Clustered-Index) zeigt der Zeiger auf einen Schlüssel im Clustered-Index, der wiederum auf die Zeile in der Tabelle zeigt. Bei Zeilen ohne Clustered-Index zeigt der Zeiger direkt auf die Tabellenzeile.
So erstellen Sie einen gruppierten Index in SQL Server
Wenn Sie eine Tabelle mit einem Primärschlüssel erstellen, erstellt SQL Server basierend auf diesem Primärschlüssel automatisch einen gruppierten Indexschlüssel. Wenn Sie keinen Primärschlüssel haben, können Sie die folgende Anweisung ausführen, um einen Clustered-Index-Schlüssel zu erstellen.
ERSTELLEN GRUPPELT INDEX <IndexName>
AUF DEM TISCH <Tabellenname>(Spaltenname)
In dieser Anweisung geben Sie den Namen des Indexes, den Namen der Tabelle, in der er erstellt werden soll, und den im Index zu verwendenden Spaltennamen an.
Wenn Sie einer Tabelle, die bereits über einen gruppierten Index verfügt, einen Primärschlüssel hinzufügen, erstellt SQL Server damit einen nicht gruppierten Index.
Um einen gruppierten Index zu erstellen, der die Primärschlüsselspalte nicht enthält, müssen Sie zuerst die Primärschlüsseleinschränkung löschen.
VERWENDENName der Datenbank
ÄNDERNTISCH Tabellenname
TROPFENZWANG pk_name
GEHEN
Durch das Entfernen der Primärschlüsseleinschränkungen wird auch der gruppierte Index entfernt, sodass Sie einen benutzerdefinierten erstellen können.
So erstellen Sie einen nicht gruppierten Index in SQL Server
Verwenden Sie die folgende Anweisung, um einen nicht gruppierten Index zu erstellen.
ERSTELLENINDEX <IndexName>
AUF DEM TISCH <Tabellenname>(Spaltenname)
Sie können das Schlüsselwort NOCLUSTERED auch so verwenden:
ERSTELLEN [NICHT EINGESCHLOSSEN] INDEX <IndexName>
AUF DEM TISCH <Tabellenname>(Spaltenname)
Diese Anweisung erstellt einen nicht gruppierten Index in der angegebenen Tabelle und schließt die angegebene Spalte ein.
Wenn Sie möchten, können Sie die Spalten in aufsteigender (ASC) oder absteigender (DESC) Reihenfolge sortieren.
ERSTELLEN [NICHT EINGESCHLOSSEN] INDEX <IndexName>
AUF DEM TISCH <Tabellenname>(Spaltenname ASC/DESC)
Welchen Index sollten Sie wählen?
Sowohl gruppierte als auch nicht gruppierte Indizes verbessern die Abfragezeit. Wenn die meisten Ihrer Abfragen SELECT-Operationen für mehrere Spalten in der Tabelle sind, sind Clustered-Indizes schneller. Bei INSERT- oder UPDATE-Vorgängen sind Non-Clustered-Indizes jedoch schneller, da der Abfrageoptimierer die Spalte direkt aus dem Index lokalisieren kann.
Wie Sie sehen können, funktionieren diese Indizes am besten für verschiedene SQL-Abfragen. Die meisten SQL-Datenbanken profitieren daher von mindestens einem gruppierten Index und nicht gruppierten Indizes für Spalten, die regelmäßig aktualisiert werden.
Die Bedeutung von Indizes in SQL Server
Geclusterte und nicht geclusterte Indizes führen zu einer höheren Abfrageleistung. Wenn Sie eine Abfrage ausführen, durchsucht der Abfrageoptimierer den Index nach dem Speicherort einer Zeile und ruft dann Informationen von diesem Ort ab. Dies ist viel schneller als das Scannen aller Zeilen in der Tabelle.
Sie können auch nicht gruppierte Indizes verwenden, um Deadlocks bei der Lesezeichensuche aufzulösen, indem Sie einen nicht gruppierten Index für Spalten erstellen, auf die die Abfragen zugreifen.