【问题标题】:Is the Sql Server Unique Key also an Index?Sql Server 唯一键也是索引吗?
【发布时间】:2010-09-26 20:12:36
【问题描述】:

我在表中有一个列(例如用户名),我想确保它是唯一的。因此,我为该列创建了一个唯一键并将其命名为 IX_Users_UserName。

现在,如果我根据用户名进行大量搜索,我想确保该字段有一个索引。

我是否需要创建一个单独的索引,或者唯一键是否也被视为索引,就像主键是聚集唯一键一样?

【问题讨论】:

标签: sql-server indexing unique-key


【解决方案1】:

基本上,在SQL Server中,唯一约束确实是通过唯一索引来实现的。

UNIQUE 约束和 UNIQUE INDEX 之间的区别非常微妙,真的。如果您创建一个 UNIQUE INDEX,您可以在另一个表的外键约束中引用它(如果您创建一个 UNIQUE 约束则不起作用......)。

那么有什么区别呢?好吧 - 唯一约束实际上更像是表上的逻辑事物 - 您想要表达给定列(或列组)的内容是唯一的意图。

唯一索引(与大多数索引一样)更多的是“幕后”实现细节。

从我的角度来看,除非你真的有问题,否则我总是使用 UNIQUE INDEX - 作为参照完整性约束的一部分的好处是非常有效的,并且在某些情况下非常有用。在功能上,实际上,使用唯一约束与唯一索引之间没有区别,真的。

【讨论】:

    【解决方案2】:

    唯一键:唯一键强制执行 他们所在的列的唯一性 被定义。唯一键创建一个 列上的非聚集索引。 Unique Key 只允许一个 NULL 值。

    更改表以添加唯一约束 到列:

    ALTER TABLE 作者添加约束 IX_Authors_Name UNIQUE(Name) GO

    Source

    更多信息来自MSDN

    FWIW -- 如果您的约束不创建索引,我会避免将其命名为 IX_,因为通常假定它与一个(IX = 索引)相关联。

    【讨论】:

    • 干杯 :) 完美答案。我还将重新命名我对 IX 的所有唯一键并删除我在这些字段上的单个索引(为什么要加倍......这很糟糕!)。干杯!
    • 我喜欢为我的唯一索引添加前缀,区别于非唯一索引:UI 或 UIX。 UK 也可以接受,但确实表明这是一个索引。
    【解决方案3】:

    我怀疑几乎所有数据库产品中的唯一键都是索引。必须如此,否则数据库将很难执行它:当您插入一个值时,数据库必须回答“该值是否已经存在?”明智的做法是查阅索引。

    我面前没有要测试的 SQL Server,但如果没有,我会感到震惊。

    【讨论】:

      猜你喜欢
      • 2012-05-03
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      相关资源
      最近更新 更多