Erstellen eines gruppierten Indexes

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Sie können gruppierte Indizes für Tabellen mithilfe von SQL Server Management Studio oder Transact-SQL erstellen. 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 werden im Artikel definiertGruppierte und nicht gruppierte Indizes.)

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 oder Spalten erstellt, wenn ein gruppierter Index in der Tabelle noch nicht vorhanden ist und Sie keinen eindeutigen nicht gruppierten Index angeben. Die Primärschlüsselspalte kann keine Werte zulassen NULL .

    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 ein gruppierter Index in der Tabelle noch nicht 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 "Nebenbedingungen für Primär- und Fremdschlüssel" und "Eindeutige Einschränkungen" und "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.

Begrenzungen

  • 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 alte Struktur wird erst nach abschluss der Transaktion umgeglichen. Möglicherweise ist auch zusätzlicher temporärer Speicherplatz für die Sortierung erforderlich. 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. Wenn ein gruppierter Index in einer Tabelle abgelegt wird, die mehrere nicht gruppierte Indizes aufweist, werden die nicht gruppierten Indizes im Rahmen des DROP Vorgangs neu erstellt. Dieser Vorgang kann für große Tabellen erhebliche Zeit in Anspruch nehmen.

    Beim Erstellen von Indizes für umfangreiche Tabellen sollten Sie möglichst mit dem gruppierten Index beginnen und dann die nicht gruppierten Indizes erstellen. Erwägen Sie, die ONLINE Option auf EIN festzulegen, wenn Sie Indizes für vorhandene Tabellen erstellen. Wenn diese Option auf "EIN" festgelegt ist, werden langfristige Tabellensperren nicht gehalten. 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 darf keine Varcharspalten enthalten, die über vorhandene Daten in der ROW_OVERFLOW_DATA Zuordnungseinheit verfügen. Wenn ein gruppierter Index in einer Varchar-Spalte erstellt wird und sich die vorhandenen Daten in der IN_ROW_DATA Zuordnungseinheit befinden, schlagen nachfolgende Einfüge- oder Aktualisierungsaktionen für die Spalte, die die Daten außerhalb der Zeile verschiebt, fehl. Um Informationen zu Tabellen abzurufen, die Zeilenüberlaufdaten enthalten können, verwenden Sie die dynamische Verwaltungsfunktion sys.dm_db_index_physical_stats (Transact-SQL ).

Berechtigungen

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

Verwenden von SQL Server Management Studio

Erstellen eines gruppierten Indexes aus 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 auswählen austable_name das Kontrollkästchen der Tabellenspalte, die dem gruppierten Index hinzugefügt werden soll.

  6. Klickan Sie auf OK.

  7. Wählen Sie im Dialogfeld "Neuer Index" "OK" aus.

Erstellen eines gruppierten Index mithilfe des Tabellen-Designers

  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 wählen Sie "Neue Tabelle" aus.

  3. Erstellen Sie eine neue Tabelle. Weitere Informationen finden Sie unter Erstellen von Tabellen (Datenbank-Engine).For more information, see Create tables (Datenbank-Engine).

  4. Klicken Sie mit der rechten Maustaste auf die zuvor erstellte neue Tabelle, und wählen Sie "Entwurf" aus.

  5. Wählen Sie im Menü Tabellen-DesignerIndizes/Schlüsselaus.

  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. Wählen Sie Schließen aus.

  10. Klicken Sie im Menü Datei auf SaveTabellenname.

Verwenden von Transact-SQL

  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 in das Abfragefenster, und klicken Sie dann auf Ausführen.

    USE AdventureWorks2022;
    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).