唯一约束和唯一索引之间有什么区别

时间:2010-04-20 13:33:24

标签: sql-server sql-server-2000

以下两个陈述之间有什么区别?

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

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

3 个答案:

答案 0 :(得分:10)

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

物理效果相同 - 在表格上构建了唯一索引。它可以是聚簇的也可以是非聚集的。

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

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

答案 1 :(得分:0)

请原谅我的第一个错误答案。唯一约束与唯一索引相同。在封面下,它确实创建了一个索引。

答案 2 :(得分:0)

您可以检查Unique Constraints and Unique Indexes之间的比较。

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