52

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

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

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

4

3 回答 3

40

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

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

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

来源

来自MSDN的更多信息。

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

于 2008-12-14T05:11:54.660 回答
22

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

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

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

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

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

于 2008-12-16T21:39:48.223 回答
1

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

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

于 2008-12-14T04:51:55.620 回答