2010-04-20 46 views
9

以下两条语句有什么区别?唯一约束和唯一索引之间的区别是什么

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 

约束是否有一个索引来帮助它强制执行唯一性,或者每次插入/更新时都会执行表扫描?

+0

查看http://dba.stackexchange.com/a/55139/6548以获取详尽的答案。 – Rory 2016-01-05 21:54:39

回答

9

“逻辑”效应是相同的 - 只有唯一值可以加载到表中。 (值得一提的是,如果该列可以为空,则只能插入一行NULL)

物理效应是相同的 - 在表上建立唯一索引。它可以是群集或非群集。

唯一真正的区别在于元数据中描述数据库的信息存储在系统表中。第一种方法是将其内部记录为索引,第二种方法将其记录为约束 - 即使净效果相同。这意味着最终唯一的区别就是创建它并在将来改变它的代码。

(对于SQL 7.0到2005,这是真的,如果他们在2008年改变它,我会感到非常惊讶)。

0

对不起,我的第一个不正确的答案。唯一约束与唯一索引完全相同。在封面下,它确实创建了一个索引。

0

您可以检查Unique Constraints and Unique Indexes来比较它们之间的差异。

本文的结论是,除了唯一约束也被列为数据库中的约束对象这一事实之外,唯一约束与唯一索引之间没有实际区别。由于无法禁用唯一约束,因此具有约束状态并不会为唯一约束提供超出唯一索引的任何其他行为。但是,有几个索引创建选项不可用于创建唯一约束的ALTER TABLE命令。