以下两个语句有什么不同?
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
这个约束是否有一个索引来帮助确保唯一性,还是每次插入/更新都要进行全表扫描?
以下两个语句有什么不同?
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
这个约束是否有一个索引来帮助确保唯一性,还是每次插入/更新都要进行全表扫描?
"逻辑"效果相同——只能加载唯一值到表中。(值得注意的是,如果列允许为空,则只能插入1行具有NULL的记录。)
物理效果也相同——在表上建立唯一索引。它可以是聚集或非聚集的。
唯一的真正区别在于元数据,即存储在系统表中描述数据库的信息。第一种方式将其内部记录为索引,而第二种方式将其记录为约束——尽管净效果相同。这意味着,最终唯一的区别是创建它和将来修改它所需的代码。
(这在SQL 7.0到2005中成立,如果在2008中有变化,我会非常惊讶。)
create unique nonclustered index IX_relation ON dbo.Person(relation) where relation is not null
。这在唯一约束中是不可能的。 - H. de Jonge抱歉我第一次回答错误。唯一约束和唯一索引是相同的。在内部,它确实创建了一个索引。