Каково различие между следующими двумя операторами?
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
Ограничение имеет индекс, чтобы помочь ему осуществить уникальность, или сканирование таблицы будет выполнено на каждом вставляемое/обновлять?
«Логический» эффект тот же - в таблицу могут быть загружены только уникальные значения. (Стоит отметить, что если столбец допускает значение NULL, может быть вставлена только 1 строка с NULL.)
Физический эффект тот же - для таблицы создается уникальный индекс. Он может быть кластеризованным или некластеризованным.
Единственная реальная разница заключается в метаданных, информации, описывающей базу данных, которая хранится в системных таблицах. В первом случае он записывается внутри как индекс, а во втором - как ограничение, даже если чистые эффекты идентичны.Это означает, что, в конечном счете, единственная разница - это код, необходимый для его создания И для изменения в будущем.
(Это верно для SQL 7.0 до 2005 г., и я был бы очень удивлен, если бы они изменили его в 2008 г.).
Извините за мой первый неправильный ответ. Ограничение уникальности идентично уникальному индексу. Под обложками он создает индекс.