我在表中有一个列(例如UserName),我想确保它是唯一的。所以我为该列创建了一个唯一的密钥,并将其命名为IX_Users_UserName。
现在,如果我根据用户名搜索大量用户,我想确保该字段有索引。
我是否需要创建单独的索引,或者唯一的密钥是否也被视为索引,就像主键是群集唯一键一样?
答案 0 :(得分:39)
唯一键:唯一键强制执行 它们所在列的唯一性 定义。 Unique Key创建了一个 列上的非聚集索引。 唯一键只允许一个NULL值。
更改表以添加唯一约束 到列:
ALTER TABLE作者ADD CONSTRAINT IX_Authors_Name UNIQUE(名称)GO
来自MSDN的更多信息。
FWIW - 如果您的约束没有创建索引,我会避免将其命名为IX_
,因为通常会假定它与一个(IX = Index)相关联。
答案 1 :(得分:20)
基本上,在SQL Server中,确实通过唯一索引实现了唯一约束。
UNIQUE约束和UNIQUE INDEX之间的区别非常微妙。如果创建UNIQUE INDEX,则可以在另一个表的外键约束中引用它(如果创建UNIQUE约束,则不起作用....)。
那有什么区别?好吧 - 一个独特的约束实际上更像是一个逻辑上的东西 - 你想要表达给定列(或列组)的内容是唯一的意图。
唯一索引(与大多数索引一样)更像是“幕后”实现细节。
从我的角度来看,除非你真的遇到问题,否则我总是使用一个独特的索引 - 作为参照完整性约束的一部分的好处是非常有效的,并且在某些情况下非常有用。从功能上来说,实际上,使用唯一约束与唯一索引之间没有区别。
答案 2 :(得分:1)
唯一的密钥是我怀疑几乎所有数据库产品的索引。它必须是,否则数据库将很难执行它:当您插入一个值时,数据库必须回答“这个值是否已经存在?”理所当然的方法是咨询索引。
我没有在我面前测试SQL Server,但如果没有,我会感到震惊。