唯一约束与唯一索引

bob*_*obs 43 sql-server database-design unique-index unique-constraint

我有兴趣了解开发人员更喜欢使用哪种技术来强制SQL Server中的唯一性:UNIQUE CONSTRAINT或UNIQUE INDEX.鉴于每种物理实现方式差异不大,您如何确定哪种方法最佳?

是否有其他原因可以评估最佳解决方案?

一个或另一个有数据库管理优势吗?

OMG*_*ies 31

这篇比较两者的MSDN文章是针对SQL Server 2000的:http://msdn.microsoft.com/en-us/library/aa224827(SQL.80).aspx

在大多数情况下,没有区别 - 约束是作为封面下的索引实现的.虽然有能力禁用约束,但它实际上并不适用于SQL Server.

只有你想要调整FILLFACTOR之类的东西才能实现唯一约束.

添加SQL Server 2008+ INCLUDE以提供更有效的覆盖索引.过滤的索引=对行子集的唯一约束/忽略多个null等.

  • 让我们来看看.INCLUDE =更有效的覆盖索引.过滤的索引=对行子集的唯一约束/忽略多个null等.这是2个标题差异. (6认同)
  • 这篇文章很好.有趣的是,除了元数据之外,它总结了"没有实际差异". (2认同)
  • @gbn:是的,但有什么变化吗? (2认同)

Jef*_*ang 30

它们没有显着差异. 创建唯一约束时,SQL Server将自动为您创建唯一索引.

使用创建索引的语法,您可以更好地控制定义唯一索引以指定聚簇/非聚簇,包含列,文件组,索引筛选(SqlSvr2008)等.

在大多数情况下,约束是优选的,因为它表达了唯一性的意图:它是一个约束.索引不表达这种意图.

至于可管理性,影响很小.您可以管理索引(rebuild,reorg),就好像它是独立于约束创建的一样.唯一的区别是约束取决于索引,因此要删除索引,还必须删除约束.


Chr*_*dge 5

我的两分钱:当我想描述业务逻辑时我会使用约束,而当我想提高性能时我会使用索引。它们可以在 DBMS 中实现相同的事实并不意味着定义这些对象的原因之间的区别不重要。