In SQL Server 2005+ (ich verwende beide), fügt das Hinzufügen der UNIQUE
Constraint zu einer Spalte automatisch einen Index, oder sollte ich noch CREATE INDEX
?Erzwingt die einmalige Erstellung einer Spalte die Erstellung eines Indexes?
Antwort
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.
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.
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. Linq wiederhole die Erstellung eines leeren Objekts?
- 2. Erstellung eines Bewertungsformulars
- 3. Optimierung der Erstellung eines Formulars
- 4. Erstellung einer Python-Zeitliste
- 5. Vereinfachen Sie die Erstellung einer Seitenliste für die Paginierung
- 6. rails3 has_one Erstellung eines Assoziationsmodells
- 7. Erstellen eines benutzerdefinierten Webparts für die Site-Erstellung in Sharepoint?
- 8. Shortcut für die Erstellung von Zeichenfeld
- 9. Allgemeine Rahmenbedingungen für die Erstellung von Trainingsdaten?
- 10. Generieren von Daten für die Erstellung eines Plots in R
- 11. Bedeutung der Zeit für die Erstellung eines Covers
- 12. Was ist der Aufwand für die Erstellung eines Log4j Logger
- 13. Bibliothek für die Erstellung von Diffs
- 14. Werkzeug für die Erstellung von Software
- 15. Hinweis für die Erstellung von Software
- 16. Rails - Erstellung einer Datenbank-Eintrag
- 17. Erstellung abgeschlossen
- 18. Bibliothek Javascript für die Erstellung von Histogramm
- 19. Die Erstellung mehrerer GUI-Instanzen verhindern
- 20. Postgres Triggerung Erstellung
- 21. Grundlegendes zur Erstellung eines Heapspeichers in Python
- 22. ASP.NET - Grundlegende Checkliste für die Erstellung einer Website in Produktion
- 23. Was könnte die Erstellung einer Edelstein-Spezifikationsdatei verhindern?
- 24. Ermöglicht python logging.handlers.RotingFileHandler die Erstellung einer schreibbaren Protokolldatei für Gruppen?
- 25. Cordova automatisierte Erstellung eines bestehenden Web-Projekt
- 26. Wie erzwinge ich die Erstellung von Ansichten mit MySQL?
- 27. Auswirkung des Attributs Statistik neu berechnen in SQL Server 2014 beim Erstellen eines Indexes
- 28. ASP.NET Dynamische GridView-Erstellung
- 29. Probleme bei der Erstellung eines BufferedImage klickbar
- 30. Alias-Erstellung in SQL Server
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). –
Nur überprüft, funktioniert die Clustered Constraint auch auf SQL-Server, ersetzt die HEAP in meinem Beispiel – Andomar
@Andomar: Ja, es ist SQL Server schrieb ich über eine gruppierte Constraint beschreiben :) Oracle nennt dieses Ding eine INDEX ORGANISED TABLE. – Quassnoi