2010-04-20 11 views
9

Qual è la differenza tra le seguenti due istruzioni?Qual è la differenza tra un vincolo univoco e un indice univoco

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 

Fa il vincolo di avere un indice di aiutarlo impone l'univocità, o sarà una scansione di tabella essere eseguita su ogni inserimento/aggiornamento?

+0

Controlla http://dba.stackexchange.com/a/55139/6548 per una risposta esauriente. – Rory

risposta

9

L'effetto "logico" è lo stesso: nella tabella possono essere caricati solo valori univoci. (Vale la pena ricordare che se la colonna è annullabile, può essere inserita solo una riga con NULL.)

L'effetto fisico è lo stesso: un indice univoco viene creato sul tavolo. Potrebbe essere cluster o non cluster.

L'unica vera differenza è nei metadati, le informazioni che descrivono il database come memorizzato nelle tabelle di sistema. Il primo modo è registrato internamente come indice e il secondo è registrato come vincolo, anche se gli effetti netti sono identici. Ciò significa che, in definitiva, l'unica differenza è il codice necessario per crearlo e modificarlo in futuro.

(Questo è vero per SQL 7.0 fino al 2005, e sarei molto sorpreso se lo hanno cambiato nel 2008).

0

Scusami per la mia prima risposta errata. Il vincolo univoco è identico all'indice univoco. Sotto le copertine, crea un indice.

0

È possibile controllare Unique Constraints and Unique Indexes per un confronto tra di loro.

L'articolo conclude che non vi è alcuna differenza pratica tra un vincolo univoco e un indice univoco diverso dal fatto che il vincolo univoco è elencato anche come oggetto vincolo nel database. Poiché non è possibile disabilitare un vincolo univoco, lo stato di un vincolo non conferisce al vincolo univoco alcun comportamento aggiuntivo oltre un indice univoco. Tuttavia, esistono diverse opzioni per la creazione dell'indice che non sono disponibili per il comando ALTER TABLE che crea un vincolo univoco.