Freigeben über


Erstellen Sie eindeutige Indizes

In diesem Thema wird beschrieben, wie Sie mithilfe von SQL Server Management Studio oder Transact-SQL einen eindeutigen Index für eine Tabelle in SQL Server 2014 erstellen. Ein eindeutiger Index garantiert, dass der Indexschlüssel keine doppelten Werte enthält und daher jede Zeile in der Tabelle auf irgendeine Weise eindeutig ist. Es gibt keine signifikanten Unterschiede zwischen der Erstellung einer UNIQUE-Einschränkung und dem Erstellen eines eindeutigen Indexes, der unabhängig von einer Einschränkung ist. Die Datenüberprüfung erfolgt auf die gleiche Weise, und der Abfrageoptimierer unterscheidet nicht zwischen einem eindeutigen Index, der durch eine Einschränkung oder manuell erstellt wurde. Das Erstellen einer UNIQUE-Einschränkung für die Spalte macht jedoch das Ziel des Indexes klar. Weitere Informationen zu UNIQUE-Einschränkungen finden Sie unter "Eindeutige Einschränkungen" und "Check Constraints".

Wenn Sie einen eindeutigen Index erstellen, können Sie eine Option zum Ignorieren doppelter Schlüssel festlegen. Wenn diese Option auf "Ja " festgelegt ist und Sie versuchen, doppelte Schlüssel zu erstellen, indem Sie Daten hinzufügen, die sich auf mehrere Zeilen (mit der INSERT-Anweisung) auswirken, wird die Zeile, die ein Duplikat enthält, nicht hinzugefügt. Wenn sie auf "Nein" festgelegt ist, schlägt der gesamte Einfügevorgang fehl, und alle Daten werden zurückgesetzt.

Hinweis

Sie können keinen eindeutigen Index für eine einzelne Spalte erstellen, wenn diese Spalte NULL in mehr als einer Zeile enthält. Ebenso können Sie keinen eindeutigen Index für mehrere Spalten erstellen, wenn die Kombination von Spalten NULL in mehr als einer Zeile enthält. Diese werden zu Indizierungszwecken als doppelte Werte behandelt.

In diesem Themenbereich

Bevor Sie beginnen

Vorteile eines eindeutigen Indexes

  • Mehrspaltige eindeutige Indizes garantieren, dass jede Kombination von Werten im Indexschlüssel eindeutig ist. Wenn beispielsweise ein eindeutiger Index in einer Kombination aus Spalten "Nachname", "Vorname" und "MiddleName" erstellt wird, könnten in der Tabelle keine zwei Zeilen dieselbe Kombination von Werten für diese Spalten enthalten.

  • Sofern die Daten in jeder Spalte eindeutig sind, können Sie sowohl einen eindeutigen gruppierten Index als auch mehrere eindeutige nicht gruppierte Indizes in derselben Tabelle erstellen.

  • Eindeutige Indizes stellen die Datenintegrität der definierten Spalten sicher.

  • Eindeutige Indizes bieten zusätzliche Informationen für den Abfrageoptimierer, der effizientere Ausführungspläne erzeugen kann.

Typische Implementierungen

Eindeutige Indizes werden auf folgende Weise implementiert:

  • PRIMARY KEY oder UNIQUE constraint

    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 NULL-Werte zulassen.

    Wenn Sie eine UNIQUE-Einschränkung erstellen, wird standardmäßig ein eindeutiger nicht gruppierter Index erstellt, um 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.

    Weitere Informationen finden Sie unter "Eindeutige Einschränkungen" und "Check Constraints " und "Primary" und "Foreign Key Constraints".

  • Index unabhängig von einer Einschränkung

    Mehrere eindeutige nicht gruppierte Indizes können in einer Tabelle definiert werden.

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

  • Indexierte Ansicht

    Zum Erstellen einer indizierten Ansicht wird ein eindeutiger gruppierter Index in mindestens einer Ansichtsspalte definiert. Die Ansicht wird ausgeführt, und das Resultset wird auf der Blattebene des Indexes auf die gleiche Weise gespeichert, wie Tabellendaten in einem gruppierten Index gespeichert werden. Weitere Informationen finden Sie unter Erstellen von indizierten Sichten.

Einschränkungen und Beschränkungen

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

  • Ein eindeutiger nicht gruppierter Index kann nicht schlüsselfreie Spalten enthalten. Weitere Informationen finden Sie unter Create Indexes with Included Columns.

Sicherheit

Erlaubnisse

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

Verwendung von SQL Server Management Studio

So erstellen Sie einen eindeutigen Index mithilfe des Tabellen-Designers

  1. Erweitern Sie im Objekt-Explorer die Datenbank, die die Tabelle enthält, 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 "Entwurf" aus.

  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 den neuen Index im Textfeld "Ausgewählter Primärschlüssel/Eindeutiger Schlüssel" oder "Index " aus.

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

  8. Wählen Sie Spalten aus, und klicken Sie dann auf das Auslassungssymbol (...).

  9. Wählen Sie im Dialogfeld "Indexspalten " unter "Spaltenname" die Spalten aus, die Sie indizieren möchten. Sie können bis zu 16 Spalten auswählen. Um eine optimale Leistung zu erzielen, wählen Sie pro Index nur eine oder zwei Spalten aus. Geben Sie für jede von Ihnen ausgewählte Spalte an, ob der Index Werte dieser Spalte in aufsteigender oder absteigender Reihenfolge anordnet.

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

  11. Wählen Sie im Raster unter (Allgemein) die Option "Eindeutig" und dann " Ja " aus der Liste aus.

  12. Optional: Wählen Sie im Hauptraster unter Tabellen-Designer"Doppelte Schlüssel ignorieren" aus, und wählen Sie dann " Ja " aus der Liste aus. Gehen Sie dazu vor, wenn Sie Versuche zum Hinzufügen von Daten ignorieren möchten, die einen doppelten Schlüssel im eindeutigen Index erstellen würden.

  13. Klicken Sie auf Schließen.

  14. Klicken Sie im Menü Datei auf Speicherntable_name.

Erstellen eines eindeutigen Indexes mithilfe des Objekt-Explorers

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

  2. Erweitern Sie den Ordner Tabellen .

  3. Erweitern Sie die Tabelle, auf der 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 im Dialogfeld "Neuer Index " auf der Seite "Allgemein " den Namen des neuen Indexes im 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 austable_name auswählen" das Kontrollkästchen oder Kontrollkästchen der Tabellenspalte oder -spalten, die dem eindeutigen Index hinzugefügt werden sollen.

  9. Klicke auf OK.

  10. Klicken Sie im Dialogfeld "Neuer Index " auf "OK".

Verwenden von Transact-SQL

So erstellen Sie einen eindeutigen Index in 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 AdventureWorks2012;  
    GO  
    -- Find an existing index named AK_UnitMeasure_Name and delete it if found  
    IF EXISTS (SELECT name from sys.indexes  
               WHERE name = N'AK_UnitMeasure_Name')   
       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).