Freigeben über


Erstellen eines eindeutigen Indexes

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance SQL-Datenbank in Microsoft Fabric

In diesem Thema wird beschrieben, wie ein eindeutiger Index für eine Tabelle in SQL Server mit SQL Server Management Studio oder Transact-SQL erstellt wird. Ein eindeutiger Index garantiert, dass der Indexschlüssel keine doppelten Werte enthält und dass deshalb jede Zeile in der Tabelle in gewisser Weise eindeutig ist. Es gibt keine bedeutenden Unterschiede zwischen dem Erstellen einer UNIQUE-Einschränkung und dem Erstellen eines eindeutigen, von Einschränkungen unabhängigen Index. Die Datenüberprüfung erfolgt auf dieselbe Weise, und der Abfrageoptimierer macht keinen Unterschied zwischen einem durch eine Einschränkung erstellten eindeutigen Index und einem manuell erstellten. Das Erstellen einer UNIQUE-Einschränkung auf der Spalte verdeutlicht jedoch die Zielsetzung des Indexes. Weitere Informationen zu UNIQUE-Einschränkungen finden Sie unter Unique Constraints and Check Constraints.

Beim Erstellen eines eindeutigen Indexes können Sie eine Option aktivieren, um doppelt vorhandene Schlüssel zu ignorieren. Wenn diese Option auf Ja festgelegt ist und Sie versuchen, doppelte Schlüssel zu erstellen, indem Sie (mit der INSERT-Anweisung) Daten hinzufügen, die mehrere Zeilen betreffen, wird die Zeile mit dem Duplikat nicht hinzugefügt. Wenn die Option auf Neinfestgelegt ist, schlägt die gesamte INSERT-Operation fehl, und alle Daten werden zurückgesetzt.

Hinweis

Sie können keinen eindeutigen Index für eine einzelne Spalte erstellen, wenn mehr als eine Zeile der Spalte NULL enthält. Ebenso können Sie keinen eindeutigen Index für mehrere Spalten erstellen, wenn die Spaltenkombination in mehreren Zeilen NULL enthält. Diese werden beim Indizieren als doppelt vorhandene Werte betrachtet.

In diesem Thema

Vorbereitungen

Vorteile eines eindeutigen Indexes

  • Eindeutige Indizes für mehrere Spalten stellen sicher, dass jede Kombination der Werte in der indizierten Spalte eindeutig ist. Wenn z. B. ein eindeutiger Index für eine Kombination der Spalten LastName, FirstNameund MiddleName erstellt wird, können keine zwei Zeilen in der Tabelle dieselbe Kombination der Werte in diesen Spalten aufweisen.

  • Unter der Voraussetzung, dass die Daten in jeder Spalte eindeutig sind, können Sie einen eindeutigen gruppierten Index und mehrere eindeutige nicht gruppierte Indizes in derselben Tabelle erstellen.

  • Eindeutige Indizes sichern die Datenintegrität der definierten Spalten.

  • Eindeutige Indizes stellen weitere hilfreiche Informationen für den Abfrageoptimierer bereit, der effizientere Ausführungspläne erstellen kann.

Typische Implementierungen

Eindeutige Indizes werden auf folgende Weise implementiert:

  • PRIMARY KEY- oder UNIQUE-Einschränkung

    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.

    Weitere Informationen finden Sie unter Unique Constraints and Check Constraints und Primary and Foreign Key Constraints.

  • Index unabhängig von einer Einschränkung

    Es können mehrere eindeutige nicht gruppierte Indizes für eine Tabelle definiert werden.

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

  • Indizierte Sicht

    Zum Erstellen einer indizierten Sicht wird ein eindeutiger gruppierter Index für mindestens eine Spalte der Sicht definiert. Diese Sicht wird ausgeführt 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.

Einschränkungen

  • Ein eindeutiger Index, die UNIQUE-Einschränkung oder die PRIMARY KEY-Einschränkung kann nicht erstellt werden, wenn in den Daten doppelte Schlüsselwerte vorhanden sind.

  • Ein eindeutiger, nicht gruppierter Index kann eingeschlossene Nichtschlüsselspalten enthalten. Weitere Informationen finden Sie unter Erstellen eines Indexes mit eingeschlossenen Spalten.

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 eindeutigen Index mit dem Tabellen-Designer

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

  2. Erweitern Sie den Ordner Tabellen .

  3. Klicken Sie mit der rechten Maustaste auf die Tabelle, in der Sie einen eindeutigen Index erstellen möchten, und wählen Sie Entwurfaus.

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

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

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

  7. Wählen Sie im Hauptraster unter (Allgemein)Typ aus, und wählen Sie dann Index aus der Liste aus.

  8. Wählen Sie Spalten aus, und klicken Sie dann auf die Auslassungspunkte (...).

  9. Wählen Sie im Dialogfeld Indexspalten unter Spaltennamedie Spalten aus, die Sie indizieren möchten. Sie können bis zu 16 Spalten auswählen. Um optimale Ergebnisse zu gewährleisten, sollten Sie für jeden Index höchstens zwei Spalten auswählen. Für jede ausgewählte Spalte können Sie festlegen, ob die darin enthaltenen Werte über den Index in aufsteigender oder absteigender Reihenfolge geordnet werden.

  10. Wenn alle Spalten für den Index ausgewählt sind, klicken Sie auf OK.

  11. Wählen Sie im Raster unter (Allgemein)Ist eindeutig aus, und wählen Sie anschließend Ja aus der Liste aus.

  12. Optional: wählen Sie im Hauptraster unter Tabellen-DesignerDoppelte Schlüssel ignorieren aus, und wählen Sie dann Ja aus der Liste aus. Auf diese Weise ignorieren Sie Versuche, Daten hinzuzufügen, die im eindeutigen Index einen doppelten Schlüssel erstellen würden.

  13. Klicken Sie auf Schließen.

  14. Klicken Sie im Menü Datei auf table_name speichern.

Erstellen eines eindeutigen Indexes mit dem Objekt-Explorer

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

  2. Erweitern Sie den Ordner Tabellen .

  3. Erweitern Sie die Tabelle, für die Sie einen eindeutigen Index erstellen möchten.

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

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

  6. Aktivieren Sie das Kontrollkästchen Eindeutig .

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

  8. Aktivieren Sie im Dialogfeld Spalten auswählen aus table_name die Kontrollkästchen der Tabellenspalten, die dem eindeutigen Index hinzugefügt werden sollen.

  9. Klicken Sie auf OK.

  10. Klicken Sie im Dialogfeld Neuer Index auf OK.

Verwenden von Transact-SQL

So erstellen Sie einen eindeutigen Index auf einer Tabelle

  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 AdventureWorks2022;  
    GO  
    -- Find an existing index named AK_UnitMeasure_Name 
    -- on the Production.UnitMeasure table and delete it if found. 
    IF EXISTS (SELECT name from sys.indexes  
               WHERE name = N'AK_UnitMeasure_Name'
               AND object_id = OBJECT_ID(N'Production.UnitMeasure', N'U'))   
       DROP INDEX AK_UnitMeasure_Name ON Production.UnitMeasure;   
    GO  
    -- Create a unique index called AK_UnitMeasure_Name  
    -- on the Production.UnitMeasure table using the Name column.  
    CREATE UNIQUE INDEX AK_UnitMeasure_Name   
       ON Production.UnitMeasure (Name);   
    GO  
    

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