Sql Server Unique Key也是索引吗?

时间:2008-12-14 04:47:54

标签: sql-server indexing unique-key

我在表中有一个列(例如UserName),我想确保它是唯一的。所以我为该列创建了一个唯一的密钥,并将其命名为IX_Users_UserName。

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

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

3 个答案:

答案 0 :(得分:39)

  

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

     

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

     

ALTER TABLE作者ADD CONSTRAINT   IX_Authors_Name UNIQUE(名称)GO

Source

来自MSDN的更多信息。

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

答案 1 :(得分:20)

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

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

那有什么区别?好吧 - 一个独特的约束实际上更像是一个逻辑上的东西 - 你想要表达给定列(或列组)的内容是唯一的意图。

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

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

答案 2 :(得分:1)

唯一的密钥是我怀疑几乎所有数据库产品的索引。它必须是,否则数据库将很难执行它:当您插入一个值时,数据库必须回答“这个值是否已经存在?”理所当然的方法是咨询索引。

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