Erstellen von Indizes (Datenbankmodul)
In diesem Thema werden die Hauptaufgaben der Indexerstellung beschrieben. Außerdem werden Implementierungs- und Leistungsrichtlinien bereitgestellt, die vor der Erstellung eines Indexes berücksichtigt werden sollten.
Aufgaben bei der Indexerstellung
Die folgenden Aufgaben fassen die empfohlene Strategie beim Erstellen von Indizes zusammen:
Entwerfen des Indexes.
Der Indexentwurf ist eine wichtige Aufgabe. Der Indexentwurf umfasst das Ermitteln der zu verwendenden Spalten, das Auswählen des Indextyps (z. B. gruppiert oder nicht gruppiert), das Auswählen der geeigneten Indexoptionen sowie das Ermitteln der Dateigruppen- oder Partitionsschemaplatzierung. Weitere Informationen finden Sie unter Entwerfen von Indizes.
Ermitteln der optimalen Erstellungsmethode. Indizes werden auf folgende Weise erstellt:
Durch Definieren einer PRIMARY KEY- oder UNIQUE-Einschränkung für eine Spalte mithilfe von CREATE TABLE oder ALTER TABLE
SQL Server Database Engine (Datenbankmodul) erstellt automatisch einen eindeutigen Index, um die Anforderungen an die Eindeutigkeit für die PRIMARY KEY- oder UNIQUE-Einschränkung zu erzwingen. Standardmäßig wird ein eindeutiger gruppierter Index erstellt, um eine PRIMARY KEY-Einschränkung zu erzwingen, wenn nicht für die Tabelle bereits ein gruppierter Index vorhanden ist oder ein eindeutiger nicht gruppierter Index angegeben wird. Standardmäßig wird ein eindeutiger nicht gruppierter Index erstellt, um eine UNIQUE-Einschränkung zu erzwingen, wenn nicht ein gruppierter Index explizit angegeben wird und für die Tabelle kein gruppierter Index vorhanden ist.
Die Indexoptionen und der -speicherort sowie die Dateigruppe oder das Partitionsschema können ebenfalls angegeben werden.
Ein Index, der als Teil einer PRIMARY KEY- oder UNIQUE-Einschränkung erstellt wird, erhält automatisch den gleichen Namen wie die Einschränkung. Weitere Informationen finden Sie unter PRIMARY KEY-Einschränkungen und UNIQUE-Einschränkungen.
Durch Erstellen eines von einer Einschränkung unabhängigen Indexes mithilfe der CREATE INDEX-Anweisung oder über das Dialogfeld Neuer Index in Objekt-Explorer von SQL Server Management Studio
Sie müssen den Namen des Indexes, der Tabelle und der Spalten angeben, für die der Index gilt. Die Indexoptionen und der -speicherort sowie die Dateigruppe oder das Partitionsschema können ebenfalls angegeben werden. Wenn die Gruppierungs- bzw. Eindeutigkeitsoptionen nicht angegeben werden, wird standardmäßig ein nicht gruppierter, nicht eindeutiger Index erstellt. Verwenden Sie die optionale WHERE-Klausel, um einen gefilterten Index zu erstellen. Weitere Informationen finden Sie unter Richtlinien für den Entwurf gefilterter Indizes.
Erstellen des Indexes.
Sie müssen unbedingt berücksichtigen, ob der Index für eine leere Tabelle oder eine Tabelle erstellt wird, die Daten enthält. Das Erstellen eines Indexes für eine leere Tabelle besitzt zum Zeitpunkt der Erstellung des Indexes keine Auswirkungen auf die Leistung; die Leistung wird jedoch beeinträchtigt, wenn der Tabelle Daten hinzugefügt werden.
Das Erstellen von Indizes für große Tabellen sollte sorgfältig geplant werden, damit die Datenbankleistung nicht beeinträchtigt wird. Beim Erstellen von Indizes für umfangreiche Tabellen sollten Sie möglichst mit dem gruppierten Index beginnen und dann die nicht gruppierten Indizes erstellen. Ziehen Sie in Betracht, die ONLINE-Option auf ON festzulegen, wenn Sie Indizes für vorhandene Tabellen erstellen. Wenn diese Option auf ON festgelegt wird, werden keine Langzeittabellensperren aktiviert, und Abfragen oder Aktualisierungen der zugrunde liegenden Tabelle können fortgesetzt werden. Weitere Informationen finden Sie unter Ausführen von Onlineindexvorgängen.
Überlegungen hinsichtlich der Implementierung
Die folgende Tabelle enthält die Maximalwerte, die für gruppierte, nicht gruppierte, räumliche, gefilterte und XML-Indizes gelten. Wenn nichts anderes angegeben wird, gelten diese Einschränkungen für alle Indextypen.
Maximale Grenzwerte für Indizes |
Wert |
Zusätzliche Informationen |
---|---|---|
Gruppierte Indizes pro Tabelle |
1 |
|
Nicht gruppierte Indizes pro Tabelle |
999 |
Schließt nicht gruppierte Indizes, die durch PRIMARY KEY- oder UNIQUE-Einschränkungen erstellt wurden, sowie gefilterte Indizes ein, nicht jedoch XML-Indizes. |
XML-Indizes pro Tabelle |
249 |
Schließt primäre und sekundäre XML-Indizes für Spalten des xml-Datentyps ein. |
Räumliche Indizes pro Tabelle |
249 |
|
Anzahl der Schlüsselspalten pro Index |
16* |
Ein gruppierter Index ist auf 15 Spalten beschränkt, wenn die Tabelle ebenfalls einen primären XML-Index oder räumliche Indizes enthält. |
Größe des Indexschlüssel-Datensatzes |
900 Byte* |
Gilt nicht für XML-Indizes oder räumliche Indizes. Damit in einer Tabelle räumliche Indizes unterstützt werden, beträgt die maximale Indexschlüssel-Datensatzgröße 895 Byte. |
*Sie können Einschränkungen für die Indexschlüsselspalte und den -Datensatz für nicht gruppierte Indizes vermeiden, indem Sie Nichtschlüsselspalten in den Index aufnehmen. Weitere Informationen finden Sie unter Index mit eingeschlossenen Spalten.
Datentypen
Im Allgemeinen kann jede beliebige Spalte in einer Tabelle oder Sicht indiziert werden. In der folgenden Tabelle werden die Datentypen aufgelistet, deren Aufnahme in den Index beschränkt ist.
Datentyp |
Aufnahme in den Index |
Zusätzliche Informationen |
---|---|---|
CLR-benutzerdefinierter Typ |
Kann indiziert werden, wenn der Typ Binärsortierung unterstützt. |
|
LOB-Datentypen (Large Object): image, ntext, text, varchar(max), nvarchar(max), varbinary(max) und xml |
Können keine Indexschlüsselspalten sein. Eine XML-Spalte kann jedoch eine Schlüsselspalte in einem primären oder sekundären XML-Index für eine Tabelle sein. Diese Datentypen können als Nichtschlüsselspalten (eingeschlossene Spalten) in einen Index aufgenommen werden. Ausnahmen: image, ntext und text. Kann aufgenommen werden, wenn es sich um einen Bestandteil eines berechneten Spaltenausdrucks handelt. |
|
Berechnete Spalten |
Können indiziert werden. Dies schließt berechnete Spalten ein, die als Methodenaufrufe einer Spalte des Typs CLR-benutzerdefiniert definiert werden, wenn diese Methoden als deterministisch gekennzeichnet werden. Berechnete Spalten, die aus LOB-Datentypen abgeleitet werden, können als Schlüsselspalte oder als Nichtschlüsselspalte indiziert werden, wenn der Datentyp der berechneten Spalte als Indexschlüsselspalte oder Nichtschlüsselspalte zulässig ist. |
|
Varchar-Spalten, für die mithilfe von Push außerhalb von Zeilen verschoben wurden |
Der Indexschlüssel eines gruppierten Indexes darf keine varchar-Spalten enthalten, für die Daten in der ROW_OVERFLOW_DATA-Zuordnungseinheit vorhanden sind. Wenn ein gruppierter Index für eine varchar-Spalte erstellt wird und die vorhandenen Daten sich in der IN_ROW_DATA-Zuordnungseinheit befinden, erzeugen nachfolgende Einfüge- oder Aktualisierungsaktionen für die Spalte, die die Daten mithilfe von Push außerhalb von Zeilen verschieben, einen Fehler. |
|
geometry |
Kann mit mehreren räumlichen Indizes indiziert werden. |
Weitere Überlegungen
Nachfolgend sind einige zusätzliche Erwägungen für die Indexerstellung aufgeführt:
Sie können einen Index erstellen, wenn Sie die CONTROL- oder ALTER-Berechtigung für die Tabelle besitzen.
Nachdem er erstellt wurde, wird der Index automatisch aktiviert und ist verwendungsbereit. Sie können den Zugriff auf einen Index entfernen, indem Sie ihn deaktivieren. Weitere Informationen finden Sie unter Deaktivieren von Indizes.
Speicherplatzanforderungen
Der Speicherplatz, der zum Speichern des Indexes erforderlich ist, hängt von den folgenden Faktoren ab:
der Größe der einzelnen Datenzeilen in der Tabelle und der Anzahl von Zeilen pro Seite. Diese beiden Faktoren bestimmen, wie viele Datenseiten vom Datenträger gelesen werden müssen, um den Index zu erstellen.
Den Spalten im Index und den verwendete Datentypen. Diese beiden Faktoren bestimmen, wie viele Indexseiten auf den Datenträger geschrieben werden müssen. Weitere Informationen finden Sie unter Schätzen der Größe eines gruppierten Index und Schätzen der Größe eines nicht gruppierten Index.
dem temporären Speicherplatz, der während des Vorgangs der Indexerstellung erforderlich ist. Weitere Informationen finden Sie unter Ermitteln der Speicherplatzanforderungen für Indizes.
Überlegungen zur Leistung
Der Zeitbedarf für die physische Erstellung eines Indexes hängt hauptsächlich vom Datenträgeruntersystem ab. Als wichtige Faktoren sind zu berücksichtigen:
Das Wiederherstellungsmodell der Datenbank. Das massenprotokollierte Wiederherstellungsmodell bietet während der Indexerstellungsoperation bessere Leistung und geringere Speicherplatzbelegung durch das Protokoll als die vollständige Wiederherstellung. Die massenprotokollierte Wiederherstellung verringert jedoch die Flexibilität für die Wiederherstellung bis zu einem bestimmten Zeitpunkt. Weitere Informationen finden Sie unter Auswählen eines Wiederherstellungsmodells für Indexvorgänge.
Die RAID-Stufe (Redundant Array of Independent Disks), die zum Speichern der Datenbank und der Transaktionsprotokolldateien verwendet wird. Im Allgemeinen weisen RAID-Stufen, die Striping verwenden, eine bessere E/A-Bandbreite auf.
Die Anzahl der Datenträger im Datenträgerarray, wenn RAID verwendet wird. Durch eine größere Anzahl von Laufwerken im Array wird die Datenübertragungsrate proportional erhöht.
Der Speicherort der Zwischensortierungsdurchläufe der Daten. Das Verwenden der Option SORT_IN_TEMPDB kann den Zeitaufwand verringern, der für das Erstellen eines Indexes erforderlich ist, wenn sich tempdb auf einem anderen Datenträgersatz als die Benutzerdatenbank befindet. Weitere Informationen finden Sie unter tempdb und Indexerstellung.
Das Erstellen des Indexes offline oder online.
Wenn ein Index offline erstellt wird (die Standardeinstellung), werden exklusive Sperren für die zugrunde liegende Tabelle aktiviert, bis die Transaktion, die den Index erstellt, abgeschlossen wurde. Auf diese Tabelle kann nicht durch Benutzer zugegriffen werden, während der Index erstellt wird.
Sie können festlegen, dass der Index online erstellt wird, außer bei XML- und räumlichen Indizes. Wenn die Onlineoption auf ON festgelegt wird, werden keine Langzeittabellensperren aktiviert, und Abfragen oder Aktualisierungen der zugrunde liegenden Tabelle können fortgesetzt werden, während der Index erstellt wird. In der Regel werden Onlineindexvorgänge empfohlen, Sie sollten jedoch Ihre Umgebung sowie besondere Anforderungen berücksichtigen. Es kann vorteilhafter sein, Indexvorgänge offline auszuführen. Dabei besitzen Benutzer während der Operation nur eingeschränkten Zugriff auf die Daten, der Vorgang wird jedoch schneller abgeschlossen und verwendet weniger Ressourcen. Weitere Informationen finden Sie unter Ausführen von Onlineindexvorgängen.
So erstellen Sie eine PRIMARY KEY- oder UNIQUE-Einschränkung, wenn Sie eine Tabelle erstellen
So erstellen Sie eine PRIMARY KEY- oder UNIQUE-Einschränkung für eine vorhandene Tabelle
So erstellen Sie einen Index
Änderungsverlauf
Aktualisierter Inhalt |
---|
Die Begrenzung für nicht gruppierte Indizes wurde auf 999 aktualisiert. |
Siehe auch