Erstellen gruppierter Indizes

Gilt für: SQL Server Azure SQL DatenbankAzure SQL Managed Instance

Sie können gruppierte Indizes für Tabellen erstellen, indem Sie SQL Server Management Studio oder Transact-SQL verwenden. 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. (Gruppierte Indizes sind im Thema Beschreibung von gruppierten und nicht gruppierten Indizesdefiniert.)

In diesem Thema

Vorbereitungen

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 and Foreign Key Constraints und Unique Constraints and Check Constraints.

  • 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.

Einschränkungen

  • 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 Disk Space Requirements for Index DDL Operations.

  • 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 Updates für die zugrunde liegende Tabelle ermöglicht. Weitere Informationen finden Sie unter Ausführen von Onlineindexvorgängen .

  • Der Indexschlüssel eines gruppierten Indexes kann keine Spalten des Datentyps varchar enthalten, bei denen Daten in der Zuordnungseinheit ROW_OVERFLOW_DATA 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 Updates der Spalte einen Fehler, bei der diese Daten aus der Zeile entfernt werden. Um Informationen zu Tabellen abzurufen, die Möglicherweise Zeilenüberlaufdaten enthalten, verwenden Sie die dynamische Verwaltungsfunktion sys.dm_db_index_physical_stats (Transact-SQL).

Sicherheit

Berechtigungen

Erfordert die ALTER-Berechtigung in der Tabelle oder Sicht. Der Benutzer muss ein Mitglied der festen Serverrolle sysadmin bzw. der festen Datenbankrollen db_ddladmin und db_owner sein.

Verwendung von SQL Server Management Studio

So erstellen Sie einen gruppierten Index mit dem Objekt-Explorer

  1. Erweitern Sie im Objekt-Explorer die Tabelle, für die Sie einen gruppierten Index erstellen möchten.

  2. Klicken Sie mit der rechten Maustaste auf den Ordner Indizes, zeigen Sie auf Neuer Index, und wählen Sie Gruppierter Index aus.

  3. Geben Sie in das Dialogfeld Neuer Index auf der Seite Allgemein den Namen des neuen Indexes in das Feld Indexname ein.

  4. Klicken Sie unter Indexschlüsselspalten auf Hinzufügen… .

  5. Aktivieren Sie im Dialogfeld Spalten austable_name auswählen das Kontrollkästchen der Tabellenspalte, die dem gruppierten Index hinzugefügt werden soll.

  6. Klicken Sie auf OK.

  7. Klicken Sie im Dialogfeld Neuer Index auf OK.

So erstellen Sie einen gruppierten Index mit dem Tabellen-Designer

  1. Erweitern Sie im Objekt-Explorer die Datenbank, für die Sie eine Tabelle mit einem gruppierten Index erstellen möchten.

  2. Klicken Sie mit der rechten Maustaste auf den Ordner Tabellen, und klicken Sie auf Neue Tabelle....

  3. Erstellen Sie eine neue Tabelle. Weitere Informationen finden Sie unter Erstellen von Tabellen (Datenbank-Engine).

  4. Klicken Sie mit der rechten Maustaste auf die neue Tabelle, und klicken Sie auf Entwurf.

  5. Klicken Sie im Menü Tabellen-Designer auf Indizes/Schlüssel.

  6. Klicken Sie im Dialogfeld Indizes/Schlüssel auf Hinzufügen.

  7. Wählen Sie im Textfeld Ausgewählter Primärschlüssel/eindeutiger Schlüssel oder Index den neuen Index aus.

  8. Wählen Sie im Datenblatt Als CLUSTERED erstellenaus, und wählen Sie in der Dropdownliste rechts neben der Eigenschaft Ja aus.

  9. Klicken Sie auf Schließen.

  10. Klicken Sie im Menü Datei auf Speicherntable_name.

Verwenden von Transact-SQL

So erstellen Sie einen gruppierten Index

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-Engine-Instanz her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen.

    USE AdventureWorks2012;  
    GO  
    -- Create a new table with three columns.  
    CREATE TABLE dbo.TestTable  
        (TestCol1 int NOT NULL,  
         TestCol2 nchar(10) NULL,  
         TestCol3 nvarchar(50) NULL);  
    GO  
    -- Create a clustered index called IX_TestTable_TestCol1  
    -- on the dbo.TestTable table using the TestCol1 column.  
    CREATE CLUSTERED INDEX IX_TestTable_TestCol1   
        ON dbo.TestTable (TestCol1);   
    GO  
    

Weitere Informationen finden Sie unter CREATE INDEX (Transact-SQL).

Weitere Informationen

Erstellen von Primärschlüsseln
Erstellen von Unique-Einschränkungen