Freigeben über


Erstellen von gruppierten Indizes

Abgesehen von wenigen Ausnahmen sollte jede Tabelle über einen gruppierten Index verfügen. Ein gruppierter Index steigert nicht nur die Abfrageleistung, sondern kann bei Bedarf auch neu erstellt oder neu organisiert werden, um die Tabellenfragmentierung zu steuern. Ein gruppierter Index kann auch für eine Sicht erstellt werden.

Typische Implementierungen

Gruppierte Indizes werden auf folgende Weise implementiert:

  • PRIMARY KEY- und UNIQUE-Einschränkungen

    Wenn Sie eine PRIMARY KEY-Einschränkung erstellen, wird automatisch ein eindeutiger gruppierter Index für die Spalte(n) erstellt, wenn noch kein gruppierter Index für die Tabelle vorhanden ist und Sie keinen eindeutigen nicht gruppierten Index angeben. Die Primärschlüsselspalte darf keine NULL-Werte zulassen.

    Wenn Sie eine UNIQUE-Einschränkung erstellen, wird ein eindeutiger nicht gruppierter Index erstellt, um standardmäßig eine UNIQUE-Einschränkung zu erzwingen. Sie können einen eindeutigen gruppierten Index angeben, wenn noch kein gruppierter Index für die Tabelle vorhanden ist.

    Ein Index, der als Bestandteil der Einschränkung erstellt wird, erhält automatisch denselben Namen wie die Einschränkung. Weitere Informationen finden Sie unter PRIMARY KEY-Einschränkungen und UNIQUE-Einschränkungen.

  • Index unabhängig von einer Einschränkung

    Sie können einen gruppierten Index für eine andere Spalte als die Primärschlüsselspalte erstellen, wenn eine nicht gruppierte Primärschlüsseleinschränkung angegeben wurde.

  • Indizierte Sicht

    Zum Erstellen einer indizierten Sicht wird ein eindeutiger gruppierter Index für eine oder mehrere Spalten der Sicht definiert. Diese Sicht wird materialisiert und das Resultset auf der Blattebene des Indexes gespeichert, so wie auch Tabellendaten in einem gruppierten Index gespeichert werden. Weitere Informationen finden Sie unter Erstellen von indizierten Sichten.

Schlüsselspaltenauswahl

Pro Tabelle ist immer nur ein gruppierter Index zulässig. Deshalb ist es sehr wichtig, die Spalten zu bestimmen, für die ein gruppierter Index erstellt werden soll. Weitere Informationen zum Auswählen der richtigen Spalte finden Sie unter Richtlinien für den Entwurf gruppierter Indizes.

Der Indexschlüssel eines gruppierten Indexes darf keine varchar-Spalten enthalten, bei denen in der Zuordnungseinheit ROW_OVERFLOW_DATA Daten vorhanden sind. Wird ein gruppierter Index für eine varchar-Spalte erstellt, bei der in der Zuordnungseinheit IN_ROW_DATA Daten vorhanden sind, erzeugen alle nachfolgenden Einfügungen und Aktualisierungen der Spalte einen Fehler, bei der diese Daten aus der Zeile herausgeschoben werden. Weitere Informationen zu Zuordnungseinheiten finden Sie unter Organisationsstruktur von Tabellen und Indizes.

Anforderungen an den Datenträgerspeicher

Beim Erstellen einer gruppierten Indexstruktur wird Speicherplatz sowohl für die alte Struktur (Quelle) als auch für die neue Struktur (Ziel) in den jeweiligen Dateien und Dateigruppen benötigt. Die Speicherzuordnung für die alte Struktur wird erst dann aufgehoben, wenn die vollständige Transaktion abgeschlossen ist. Eventuell wird weiterer Speicherplatz temporär für Sortierzwecke benötigt. Weitere Informationen finden Sie unter Ermitteln der Speicherplatzanforderungen für Indizes.

Überlegungen zur Leistung

Wenn ein gruppierter Index in einem Heap mit mehreren nicht gruppierten Indizes erstellt wird, müssen alle nicht gruppierten Indizes neu erstellt werden, damit sie statt der Zeilen-ID (RID) den Gruppierungsschlüsselwert enthalten. Entsprechend gilt, dass beim Löschen eines gruppierten Indexes in einer Tabelle mit mehreren nicht gruppierten Indizes alle nicht gruppierten Indizes beim Ausführen der DROP-Anweisung neu erstellt werden. Dies kann bei umfangreichen Tabellen sehr lange dauern.

Beim Erstellen von Indizes für umfangreiche Tabellen sollten Sie möglichst mit dem gruppierten Index beginnen und dann die nicht gruppierten Indizes erstellen. Legen Sie gegebenenfalls die ONLINE-Option auf ON fest, wenn Sie Indizes für vorhandene Tabellen erstellen. Beim Wert ON werden keine lang andauernden Tabellensperren aufrechterhalten. Damit wird die Fortsetzung von Abfragen oder Aktualisierungen für die zugrunde liegende Tabelle ermöglicht. 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