Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Index ist eine Datenträgerstruktur, die einer Tabelle oder Ansicht zugeordnet ist, die 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-Struktur) gespeichert, mit der SQL Server die Zeile oder Zeilen finden kann, die den Schlüsselwerten zugeordnet sind, schnell und effizient.
Eine Tabelle oder Ansicht kann die folgenden Indizes enthalten:
Geclustert
Gruppierte 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. Pro Tabelle kann nur ein gruppierter Index vorhanden sein, da die Datenzeilen selbst in nur einer Reihenfolge sortiert werden können.
Die einzige Zeit, in der die Datenzeilen in einer Tabelle in sortierter Reihenfolge gespeichert werden, ist, wenn die Tabelle einen gruppierten Index enthält. Wenn eine Tabelle über einen gruppierten Index verfügt, wird die Tabelle als gruppierte Tabelle bezeichnet. Wenn eine Tabelle keinen gruppierten Index aufweist, werden die Datenzeilen in einer ungeordneten Struktur gespeichert, die als Heap bezeichnet wird.
Nicht gruppiert
Nicht gruppierte Indizes weisen eine separate Struktur von den Datenzeilen auf. Ein nicht gruppierter Index enthält die nicht gruppierten Indexschlüsselwerte, und jeder Schlüsselwerteintrag weist einen Zeiger auf die Datenzeile auf, die den Schlüsselwert enthält.
Der Zeiger aus einer Indexzeile in einem nicht gruppierten Index auf eine Datenzeile wird als Zeilenlocator bezeichnet. Die Struktur des Zeilenlocators hängt davon ab, ob die Datenseiten in einem Heap oder einer gruppierten Tabelle gespeichert werden. Bei einem Heap ist ein Zeilenlocator ein Zeiger auf die Zeile. Bei einer gruppierten Tabelle ist der Zeilenlocator der gruppierte Indexschlüssel.
Sie können der Blattebene des Nicht-Clustered-Indexes Nichtschlüsselspalten hinzufügen, um vorhandene Indexschlüsselgrenzwerte von 900 Bytes und 16 Schlüsselspalten zu umgehen und vollständig abgedeckte und indizierte Abfragen auszuführen. Weitere Informationen finden Sie unter Create Indexes with Included Columns.
Sowohl gruppierte als auch nicht gruppierte Indizes können eindeutig sein. Dies bedeutet, dass keine zwei Zeilen den gleichen Wert für den Indexschlüssel aufweisen können. Andernfalls ist der Index nicht eindeutig, und mehrere Zeilen können denselben Schlüsselwert gemeinsam nutzen. 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 Speziellen Indizes finden Sie unter "Indizes ".
Indizes und Einschränkungen
Indizes werden automatisch erstellt, wenn PRIMARY KEY- und UNIQUE-Einschränkungen in Tabellenspalten definiert werden. Wenn Sie beispielsweise eine Tabelle erstellen und eine bestimmte Spalte als Primärschlüssel identifizieren, erstellt das Datenbankmodul automatisch eine PRIMARY KEY-Einschränkung und einen Index für diese Spalte. Weitere Informationen finden Sie unter Erstellen von Primärschlüsseln und Erstellen eindeutiger Einschränkungen.
Verwendung von Indizes durch den Abfrageoptimierer
Gut gestaltete Indizes können Datenträger-E/A-Vorgänge reduzieren und weniger Systemressourcen verbrauchen, 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. Die Methode kann ein Tabellenscan sein oder ein oder mehrere Indizes scannen, falls sie existieren.
Beim Ausführen eines Tabellenscans liest der Abfrageoptimierer alle Zeilen in der Tabelle und extrahiert die Zeilen, die den Kriterien der Abfrage entsprechen. Eine Tabellenüberprüfung generiert viele E/A-Vorgänge auf Datenträgern und kann ressourcenintensiv sein. Ein Tabellenscan kann jedoch die effizienteste Methode sein, wenn das Resultset der Abfrage beispielsweise ein hoher Prozentsatz von Zeilen aus der Tabelle ist.
Wenn der Abfrageoptimierer einen Index verwendet, durchsucht er die Indexschlüsselspalten, findet den Speicherort der Zeilen, die von der Abfrage benötigt werden, und extrahiert die übereinstimmenden Zeilen aus diesem Speicherort. Im Allgemeinen ist das Durchsuchen des Indexes wesentlich schneller als das Durchsuchen der Tabelle, da im Gegensatz zu einer Tabelle ein Index häufig sehr wenige Spalten pro Zeile enthält und die Zeilen in sortierter Reihenfolge sind.
Der Abfrageoptimierer wählt bei der Ausführung von Abfragen in der Regel die effizienteste Methode aus. Wenn jedoch keine Indizes verfügbar sind, muss der Abfrageoptimierer einen Tabellenscan verwenden. Ihre Aufgabe besteht darin, Indizes zu entwerfen und zu erstellen, die am besten für Ihre Umgebung geeignet sind, damit der Abfrageoptimierer eine Auswahl effizienter Indizes hat, aus denen sie auswählen können. SQL Server stellt den Datenbankmoduloptimierungsratgeber bereit, um bei der Analyse Ihrer Datenbankumgebung und bei der Auswahl geeigneter Indizes zu helfen.