Erstellen eindeutiger Indizes
Durch das Erstellen eines eindeutigen Indexes wird sichergestellt, dass jeder Versuch der Verdoppelung von Schlüsselwerten einen Fehler erzeugt. Es gibt keine bedeutenden Unterschiede zwischen dem Erstellen einer UNIQUE-Einschränkung und dem Erstellen eines eindeutigen, von Einschränkungen unabhängigen Indexes. 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. Wenn jedoch Datenintegrität das Ziel ist, empfiehlt es sich, eine UNIQUE-Einschränkung auf der Spalte zu erstellen. Dies erklärt das Ziel des Indexes.
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 PRIMARY KEY-Einschränkungen und UNIQUE-Einschränkungen. - 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
Um eine indizierte Sicht zu erstellen, werden eindeutige gruppierte Indizes jeweils für eine oder mehrere Sichtspalten definiert. Die Sicht wird ausgeführt (materialisiert), und das Resultset wird auf der Blattebene des Indexes gespeichert, genauso wie die Tabellendaten in einem gruppierten Index gespeichert werden. Weitere Informationen finden Sie unter Erstellen von indizierten Sichten.
Problemlösung bei doppelten Werten
Ein eindeutiger Index bzw. eine eindeutige Einschränkung kann nicht erstellt werden, wenn bereits doppelte Werte in den Schlüsselspalten vorhanden sind. Wenn Sie beispielsweise einen eindeutigen zusammengesetzten Index für die Spalten FirstName und LastName erstellen möchten, jedoch zwei Zeilen in der Tabelle vorhanden sind, die die Werte 'Jane'
und 'Smith' in den Spalten FirstName und LastName
enthalten, kann kein eindeutiger Index erstellt werden. Dieses Problem kann auf eine der folgenden Arten gelöst werden:
- Fügen Sie der Indexdefinition Spalten hinzu, oder entfernen Sie Spalten, um eine eindeutige Zusammensetzung zu erstellen. In dem vorhergehenden Beispiel könnte das Problem gelöst werden, indem Sie der Indexdefinition eine MiddleName-Spalte hinzufügen.
- Wenn die doppelten Werte durch Dateneingabefehler entstanden sind, korrigieren Sie die Daten manuell, und erstellen Sie dann den Index bzw. die Einschränkung.
Verwenden der IGNORE_DUP_KEY-Option zur Behandlung von doppelten Werten
Beim Erstellen eines eindeutigen Indexes bzw. einer eindeutigen Einschränkung können Sie die IGNORE_DUP_KEY-Option auf ON oder OFF festlegen. Diese Option gibt die Antwort auf Fehler beim Erstellen von Indizes mit doppelten Schlüsselwerten in mehrzeiligen INSERT-Anweisungen an. Wenn IGNORE_DUP_KEY auf OFF festgelegt ist (die Standardeinstellung), weist das SQL Server 2005-Datenbankmodul alle Zeilen der Anweisungen zurück, wenn mindestens eine Zeile doppelte Schlüsselwerte enthält. Wenn die Option auf ON festgelegt ist, werden nur die Zeilen zurückgewiesen, die doppelte Schlüsselwerte enthalten. Die anderen Schlüsselwerte werden hinzugefügt.
Wenn beispielsweise eine einzelne Anweisung einer Tabelle mit einem eindeutigen Index 20 Zeilen hinzufügt und 10 dieser Zeilen doppelte Schlüsselwerte enthalten, werden standardmäßig alle 20 Zeilen zurückgewiesen. Wenn jedoch die IGNORE_DUP_KEY-Indexoption auf ON festgelegt wird, werden nur die 10 doppelten Schlüsselwerte zurückgewiesen. Die 10 anderen Schlüsselwerte werden in die Tabelle eingefügt.
Die Optionseinstellung wird in den Metadaten des Indexes gespeichert. Verwenden Sie die Katalogsicht sys.indexes, um die aktuelle Einstellung anzuzeigen.
Hinweis: |
---|
IGNORE_DUP_KEY kann nicht für Indizes für Sichten oder für XML-Indizes angegeben werden. |
Behandlung von NULL-Werten
Beim Erstellen von Indizes werden NULL-Werte als "gleich" betrachtet. Daher können Sie keinen eindeutigen Index bzw. keine UNIQUE-Einschränkung erstellen, wenn die Schlüsselwerte mehrerer Zeilen NULL-Werte enthalten. Wählen Sie für eindeutige Indizes bzw. eindeutige Einschränkungen Spalten aus, die als NOT NULL definiert sind.
Benötigter Speicherplatz
Das Verfahren zum Ermitteln der Speicherplatzanforderungen für eindeutige Indizes entspricht dem Verfahren für gruppierte und nicht gruppierte Indizes. Informationen zu den Speicherplatzanforderungen für Indizes finden Sie unter Ermitteln der Speicherplatzanforderungen für Indizes.
So erstellen Sie einen Index, wenn Sie eine Tabelle erstellen
So erstellen Sie einen Index für eine vorhandene Tabelle
Siehe auch
Konzepte
Füllfaktor
index create memory (Option)
Ändern von Indizes
Platzieren von Indizes in Dateigruppen
PRIMARY KEY-Einschränkungen
UNIQUE-Einschränkungen
Andere Ressourcen
ALTER INDEX (Transact-SQL)
sys.indexes (Transact-SQL)