2009-05-25 7 views

Antwort

8

Sehen Sie diese MSDN article:

Die Database Engine automatisch erstellt einen eindeutigen Index, der die Einzigartigkeit Anforderung der UNIQUE Einschränkung zu erzwingen.

Wenn Sie einen Index erstellen zu tun, werden Sie sich mit zwei Indizes beenden, wie dieses Beispiel zeigt:

create table TestTable (id int) 
alter table TestTable add constraint unique_id unique (id) 
create unique index ix_TestTable_id on TestTable (id) 

select * from sys.indexes where [object_id] = object_id('TestTable') 

Diese zwei eindeutige Indizes auf Testtable angezeigt wird; und der HEAP, der die Tabelle selbst darstellt.

1

Ein Index wird erstellt, wenn Sie eine eindeutige Einschränkung hinzufügen:

Reference - den zweiten Absatz sehen.

Wenn eine UNIQUE-Einschränkung auf eine vorhandene Spalte oder Spalten in der Tabelle hinzugefügt wird, standardmäßig die Database Engine untersucht die vorhandenen Daten in den Spalten um sicherzustellen, dass alle Werte sind einzigartig. Wenn eine UNIQUE-Einschränkung zu einer Spalte hinzugefügt wurde, die Werte dupliziert hat, gibt das Datenbankmodul einen Fehler zurück und fügt die Einschränkung nicht hinzu.

Die Database Engine automatisch erstellt einen eindeutigen Index, der die Einzigartigkeit Anforderung der UNIQUE Einschränkung zu erzwingen. Wenn ein Versuch , eine doppelte Zeile einzufügen, vorgenommen wird, gibt Database Engine eine Fehlermeldung zurück, die besagt, dass die UNIQUE -Einschränkung verletzt worden ist, und fügt die Zeile der Tabelle nicht hinzu. Wenn kein Clustered-Index explizit angegeben wird, wird standardmäßig ein eindeutiger, nicht gruppierter -Index erstellt, um die UNIQUE-Einschränkung zu erzwingen.

2

Ja, tut es.

In der Tat können Sie sogar erstellen CLUSTERED UNIQUE CONSTRAINT:

ALTER TABLE mytable ADD CONSTRAINT UX_mytable_col1 UNIQUE CLUSTERED (col1) 

, die in der Tabelle auf col1 geclustert werden machen.

Fast alle Datenbanken erstellen einen Index für UNIQUE CONSTRAINT, sonst wäre es sehr schwierig, es zu verwalten.

Oracle unterscheidet nicht einmal zwischen UNIQUE CONSTRAINT und UNIQUE INDEX: ein Befehl ist nur ein Synonym für einen anderen.

Der einzige Unterschied in Oracle ist, dass ein UNIQUE INDEX einen vom Benutzer angegebenen Namen haben sollte, während ein UNIQUE CONSTRAINT kann mit einem System generierten Namen erstellt werden:

ALTER TABLE mytable MODIFY col1 UNIQUE 

Dies wird einen Index SYS_CXXXXXX genannt erstellen.

+1

Wenn Sie eine Spalte eindeutig machen, wird Oracle den eindeutigen Index nicht erstellen, wenn die Spalte bereits indiziert ist, da sie eine eindeutige Integritätsbedingung mit einem nicht eindeutigen Index überwachen kann (obwohl dies normalerweise nicht empfohlen wird). –

+0

Nur überprüft, funktioniert die Clustered Constraint auch auf SQL-Server, ersetzt die HEAP in meinem Beispiel – Andomar

+0

@Andomar: Ja, es ist SQL Server schrieb ich über eine gruppierte Constraint beschreiben :) Oracle nennt dieses Ding eine INDEX ORGANISED TABLE. – Quassnoi

Verwandte Themen