Sql Server的唯一键也是索引吗?
我有一个表(例如用户名),我想确保是唯一的一列。 所以我为该列创build一个唯一的键,并将其称为IX_Users_UserName。
现在,如果我根据用户名进行大量search,我想确保该字段有一个索引。
我是否需要创build一个单独的索引,还是唯一的键也被认为是一个索引,就像主键是一个聚集的唯一键?
唯一密钥:唯一密钥强制定义它们的列的唯一性。 唯一键在列上创build一个非聚集索引。 唯一键只允许一个NULL值。
改变表格以向列添加唯一约束:
ALTER TABLE作者ADD CONSTRAINT IX_Authors_Name UNIQUE(Name)GO
资源
来自MSDN的更多信息。
FWIW – 如果你的约束不创build一个索引,我会避免将它命名为IX_
,因为通常假定它与一个(IX = Index)关联。
基本上,在SQL Server中,唯一的约束确实是通过唯一的索引实现的。
真正的UNIQUE约束和UNIQUE INDEX之间的区别是非常微妙的。 如果创build了一个UNIQUE INDEX,那么可以从另一个表的外键约束中引用它(如果创build了UNIQUE约束,则不起作用)。
那有什么区别? 那么 – 一个唯一的约束在表格上更是一个合乎逻辑的事情 – 你想要expression一个给定的列(或者一组列)的内容是唯一的。
独特的索引(像大多数索引)更像是一个“幕后”实现细节。
从我的angular度来看,除非真的有问题,否则我总是使用UNIQUE INDEX – 作为参照完整性约束的一部分的好处是非常有效的,在某些情况下非常有用。 在function上,实际上,真正使用唯一约束与唯一索引没有区别。
一个唯一的关键是我怀疑几乎每一个数据库产品的索引。 它必须是,否则数据库将很难执行它:当你插入一个值时,数据库必须回答“这个值是否已经存在? 理智的做法是咨询索引。
我没有在我面前的SQL Server来testing,但如果没有,我会感到震惊。