Clustered und Nonclustered Indexes beschrieben

  • 11.02.2019
  • 4 Minuten zum Lesen
    • M
    • M
    • C
    • M
    • r
    • +9

Gilt für: SQL Server (alle unterstützten Versionen) Azure SQL-Datenbank

Ein Index ist eine Struktur auf der Festplatte, die einer Tabelle oder Ansicht zugeordnet ist und das Abrufen von Zeilen aus der Tabelle oder Ansicht beschleunigt. Ein Index enthält Schlüssel, die aus einer oder mehreren Spalten in der Tabelle oder Ansicht erstellt wurden. Diese Schlüssel werden in einer Struktur (B-Tree) gespeichert, mit der SQL Server die mit den Schlüsselwerten verknüpften Zeilen schnell und effizient finden kann.

Eine Tabelle oder Ansicht kann die folgenden Arten von Indizes enthalten:

  • Clustered

    • Clustered-Indizes sortieren und speichern die Datenzeilen in der Tabelle oder Ansicht basierend auf ihren Schlüsselwerten. Dies sind die Spalten, die in der Indexdefinition enthalten sind. Es kann nur einen Clustered-Index pro Tabelle geben, da die Datenzeilen selbst nur in einer Reihenfolge gespeichert werden können.
    • Die Datenzeilen in einer Tabelle werden nur dann in sortierter Reihenfolge gespeichert, wenn die Tabelle einen Clustered-Index enthält. Wenn eine Tabelle einen Clustered-Index hat, wird die Tabelle als Clustered-Tabelle bezeichnet. Wenn eine Tabelle keinen Clustered-Index hat, werden ihre Datenzeilen in einer ungeordneten Struktur gespeichert, die als Heap bezeichnet wird.
  • Nonclustered

    • Nicht gruppierte Indizes haben eine von den Datenzeilen getrennte Struktur. Ein nicht gruppierter Index enthält die nicht gruppierten Indexschlüsselwerte, und jeder Schlüsselwerteintrag enthält einen Zeiger auf die Datenzeile, die den Schlüsselwert enthält.

    • Der Zeiger aus einer Indexzeile in einer nicht gruppierten Der Index für eine Datenzeile wird als Zeilenlokalisierung bezeichnet. Die Struktur des Zeilenlokators hängt davon ab, ob die Datenseiten in einem Heap oder einer Clustertabelle gespeichert sind. Bei einem Heap ist ein Zeilenlokator ein Zeiger auf die Zeile. Bei einer gruppierten Tabelle ist der Zeilenlokator der gruppierte Indexschlüssel.

    • Sie können der Blattebene des nicht gruppierten Index Spalten ohne Schlüssel hinzufügen, um vorhandene Indexschlüsselgrenzen zu umgehen. und führen Sie vollständig abgedeckte, indizierte Abfragen aus. Weitere Informationen finden Sie unter Erstellen von Indizes mit eingeschlossenen Spalten. Ausführliche Informationen zu den Grenzwerten für Indexschlüssel finden Sie unter Angaben zur maximalen Kapazität für SQL Server.

Sowohl gruppierte als auch nicht gruppierte Indizes können eindeutig sein. Dies bedeutet, dass keine zwei Zeilen denselben Wert für den Indexschlüssel haben können. Andernfalls ist der Index nicht eindeutig und mehrere Zeilen können denselben Schlüsselwert verwenden. Weitere Informationen finden Sie unter Erstellen eindeutiger Indizes.

Indizes werden automatisch für eine Tabelle oder Ansicht verwaltet, wenn die Tabellendaten geändert werden.

Weitere Arten von Sonderindizes finden Sie unter Indizes.

Indizes und Einschränkungen

Indizes werden automatisch erstellt, wenn PRIMARY KEY- und UNIQUE-Einschränkungen für Tabellenspalten definiert werden. Wenn Sie beispielsweise eine Tabelle mit einer EINZIGARTIGEN Einschränkung erstellen, erstellt das Datenbankmodul automatisch einen nicht gruppierten Index. Wenn Sie einen PRIMARY KEY konfigurieren, erstellt Database Engine automatisch einen Clustered-Index, sofern noch kein Clustered-Index vorhanden ist. Wenn Sie versuchen, eine PRIMARY KEY-Einschränkung für eine vorhandene Tabelle zu erzwingen und für diese Tabelle bereits ein Clustered-Index vorhanden ist, erzwingt SQL Server den Primärschlüssel mithilfe eines nicht gruppierten Index.

Weitere Informationen finden Sie unter Erstellen von Primärschlüsseln und Erstellen Sie eindeutige Einschränkungen.

Verwendung von Indizes durch das Abfrageoptimierungsprogramm

Durch gut gestaltete Indizes können E / A-Vorgänge auf der Festplatte reduziert und weniger Systemressourcen verbraucht werden, wodurch die Abfrageleistung verbessert wird. Indizes können für eine Vielzahl von Abfragen hilfreich sein, die SELECT-, UPDATE-, DELETE- oder MERGE-Anweisungen enthalten. Betrachten Sie die Abfrage SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250 in der AdventureWorks2012-Datenbank. Wenn diese Abfrage ausgeführt wird, wertet der Abfrageoptimierer jede verfügbare Methode zum Abrufen der Daten aus und wählt die effizienteste Methode aus. Das Verfahren kann ein Tabellenscan sein oder einen oder mehrere Indizes scannen, falls vorhanden.

Bei der Durchführung eines Tabellenscans liest der Abfrageoptimierer alle Zeilen in der Tabelle und extrahiert die Zeilen, die übereinstimmen die Kriterien der Abfrage. Ein Tabellenscan generiert viele Festplatten-E / A-Vorgänge und kann ressourcenintensiv sein. Ein Tabellenscan kann jedoch die effizienteste Methode sein, wenn beispielsweise die Ergebnismenge der Abfrage einen hohen Prozentsatz von Zeilen aus der Tabelle enthält.

Wenn der Abfrageoptimierer einen Index verwendet, durchsucht er den Indexschlüsselspalten, findet den Speicherort der von der Abfrage benötigten Zeilen und extrahiert die übereinstimmenden Zeilen aus diesem Speicherort. Im Allgemeinen ist das Durchsuchen des Index viel schneller als das Durchsuchen der Tabelle, da ein Index im Gegensatz zu einer Tabelle häufig nur sehr wenige Spalten pro Zeile enthält und die Zeilen in sortierter Reihenfolge sind.

Der Abfrageoptimierer wählt normalerweise die effizienteste Methode bei der Ausführung von Abfragen aus. Wenn jedoch keine Indizes verfügbar sind, muss das Abfrageoptimierungsprogramm einen Tabellenscan verwenden. Ihre Aufgabe besteht darin, Indizes zu entwerfen und zu erstellen, die für Ihre Umgebung am besten geeignet sind, damit das Abfrageoptimierungsprogramm über eine Auswahl effizienter Indizes verfügt, aus denen Sie auswählen können. SQL Server bietet den Database Engine Tuning Advisor, der Sie bei der Analyse Ihrer Datenbankumgebung und bei der Auswahl geeigneter Indizes unterstützt.

Wichtig

Weitere Informationen zu Richtlinien für das Indexdesign Informationen zu Interna finden Sie im SQL Server-Index-Entwurfshandbuch.

  • SQL Server-Index-Entwurfshandbuch
  • Erstellen von Clustered-Indizes
  • Erstellen von Nonclustered Indizes

Leave a Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.