我在表中有一列(例如。UserName),我想确保它是唯一的。因此,我为该列创建了一个惟一键,并将其命名为IX_Users_UserName。
现在,如果我根据用户名对用户进行大量搜索,我希望确保该字段有索引。
我是否需要创建一个单独的索引,或者唯一键是否也被视为索引,就像主键是聚集的唯一键一样?
发布于 2008-12-14 05:11:55
唯一键:唯一键强制在其上定义它们的列的唯一性。Unique Key在列上创建非聚集索引。唯一键只允许一个空值。
Alter table将唯一约束添加到列:
ALTER TABLE Authors ADD CONSTRAINT IX_Authors_Name UNIQUE(Name) GO
Source
有关更多信息,请访问MSDN。
FWIW --如果您的约束没有创建索引,我将避免将其命名为IX_
,因为通常假定它与一个索引相关联(IX =索引)。
发布于 2008-12-16 21:39:48
基本上,在SQL Server中,唯一约束实际上是通过唯一索引来实现的。
UNIQUE约束和UNIQUE索引之间的区别非常微妙。如果创建唯一索引,则可以在来自另一个表的外键约束中引用该索引(如果创建唯一约束,则不起作用……)。
那么有什么不同呢?唯一约束实际上更像是一个表上的逻辑问题--您希望表达给定列(或一组列)的内容是唯一的。
唯一索引(像大多数索引一样)更多的是“幕后”实现细节。
在我看来,除非你真的有问题,否则我总是使用唯一的索引-成为引用完整性约束的一部分的好处是非常有效的,并且在某些情况下可能非常有用。在功能上,在实践中,使用唯一约束和唯一索引没有区别。
发布于 2008-12-14 04:51:56
唯一键是几乎所有数据库产品中的索引。它必须是,否则数据库将很难强制执行它:当您插入一个值时,数据库必须回答“该值是否已经存在?”要做到这一点,明智的方法是查阅索引。
我面前没有一台SQL Server可以测试,但如果它没有的话,我会感到震惊。
https://stackoverflow.com/questions/366186
复制相似问题