2010-04-20 2 views
9

Worin besteht der Unterschied zwischen den folgenden beiden Anweisungen?Was ist der Unterschied zwischen einer eindeutigen Integritätsregel und einem eindeutigen Index?

alter table [dbo].[Demo] add constraint [UC_Demo_Code] unique ([Code]) 
go 
create unique nonclustered index [UK_Demo_Code] on [dbo].[Demo] ([NB_Code]) 
go 

Ist die Einschränkung hat einen Index, die Eindeutigkeit erzwingen zu helfen, oder wird ein Tabellenscan bei jedem Einsatz durchgeführt werden/aktualisieren?

+0

Überprüfen Sie http://dba.stackexchange.com/a/55139/6548 für eine gründliche Antwort. – Rory

Antwort

9

Der "logische" Effekt ist der gleiche - nur eindeutige Werte dürfen in die Tabelle geladen werden. (Es ist erwähnenswert, dass, wenn die Spalte nullfähig ist, nur 1 Zeile mit NULL eingefügt werden kann.)

Der physische Effekt ist der gleiche - ein eindeutiger Index wird auf der Tabelle erstellt. Es könnte entweder gruppiert oder nicht gruppiert sein.

Der einzige wirkliche Unterschied besteht in den Metadaten, den Informationen, die die Datenbank beschreiben, wie sie in den Systemtabellen gespeichert sind. Der erste Weg wird intern als ein Index aufgezeichnet und der zweite als Einschränkung - obwohl die Nettoeffekte identisch sind. Das bedeutet letztendlich, dass der einzige Unterschied der Code ist, der benötigt wird, um ihn zu erstellen UND in der Zukunft zu ändern.

(Dies gilt für SQL 7.0 bis 2005, und ich wäre sehr überrascht, wenn sie es im Jahr 2008 geändert hätten).

0

Entschuldigung für meine erste falsche Antwort. Die eindeutige Einschränkung ist identisch mit dem eindeutigen Index. Unter den Deckeln schafft es einen Index.

0

Sie können Unique Constraints and Unique Indexes für einen Vergleich zwischen ihnen überprüfen.

Der Artikel kommt zu dem Schluss, dass es keinen praktischen Unterschied zwischen einer eindeutigen Integritätsregel und einem eindeutigen Index gibt, abgesehen von der Tatsache, dass die eindeutige Integritätsbedingung auch als Einschränkungsobjekt in der Datenbank aufgeführt ist. Da eine eindeutige Integritätsbedingung nicht inaktiviert werden kann, gibt die Statusbedingung einer Integritätsbedingung der eindeutigen Integritätsbedingung kein zusätzliches Verhalten, das über einen eindeutigen Index hinausgeht. Es gibt jedoch mehrere Indexerstellungsoptionen, die für den ALTER TABLE-Befehl, der eine eindeutige Integritätsbedingung erstellt, nicht verfügbar sind.