2008-12-14 92 views
50

我在表格中有一列(例如用户名),我想确保它是唯一的。因此,我为该列创建了一个唯一的键,并将其称为IX_Users_UserName。Sql Server唯一键也是索引吗?

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

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

+2

我觉得有必要指出一个主键不是自动聚集的唯一键。您的聚簇索引不需要位于主键上。 – 2010-07-21 19:23:01

+0

另请参阅http://stackoverflow.com/questions/564895/what-is-the-difference-between-unique-key-and-index-with-isunique-yes – 2011-09-20 19:06:52

回答

37

唯一密钥:唯一键强制 独特性上,他们 定义之列。唯一密钥在该列上创建一个非聚集索引 。 唯一键只允许一个NULL值。

alter table来唯一约束 添加到列:

ALTER TABLE作者补充约束 IX_Authors_Name UNIQUE(名称)从MSDN GO

Source

更多信息。如果你的约束没有创建索引,我会避免将它命名为IX_,因为通常假定它与一个(IX =索引)相关联。

1

唯一的关键是我怀疑几乎每一个数据库产品的索引。它必须是,否则数据库将很难实施它:当你插入一个值时,数据库必须回答“这个值是否已经存在?”理智的方法是咨询索引。

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

20

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

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

那有什么区别?那么 - 一个唯一的约束在表格中更是一个合乎逻辑的事情 - 您想要表达给定列(或列组)的内容是唯一的意图。

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

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