【发布时间】:2011-04-17 05:08:24
【问题描述】:
唯一索引和唯一键有什么区别?
【问题讨论】:
标签: sql-server database-design unique-constraint unique-index
唯一索引和唯一键有什么区别?
【问题讨论】:
标签: sql-server database-design unique-constraint unique-index
独特之处不在于差异所在。 index和key不是一回事,没有可比性。
键是一个数据列或多个列,它们通过约束强制唯一,无论是主键还是显式定义的唯一约束。而索引是一种用于存储数据位置以便更快检索的结构。
来自文档:
在表上创建唯一索引或 看法。唯一索引是其中的一个 不允许有两行 相同的索引键值。一个集群 视图上的索引必须是唯一的
您可以使用 UNIQUE 约束来制作 确保没有重复值 在特定的列中输入 不参与主键。 尽管 UNIQUE 约束和 PRIMARY KEY 约束强制 唯一性,使用 UNIQUE 约束 而不是 PRIMARY KEY 约束 当你想强制执行 列或组合的唯一性 列,这不是主要的 键。
【讨论】:
这个MSDN article comparing the two is what you're after。术语是这样的,“约束”是 ANSI,但在 SQL Server 中,您不能禁用唯一约束...
在大多数情况下,没有区别 - 约束是作为索引实现的。 MSDN 文章支持这一点——区别在于元数据,例如:
【讨论】:
“唯一键”是一个重言式。键(又名“候选键”)是数据库的逻辑特征 - 一种强制执行表中一组属性的唯一性的约束。
索引是一种物理级别的功能,旨在以某种方式优化性能。索引的种类很多。
【讨论】:
唯一键:这是对数据库施加限制的约束。该限制是它不允许重复值。例如,如果你想选择一列作为主键,它应该是 NOT NULL & UNIQUE。
唯一索引:它是一种在对数据库执行查询时提高性能的索引。在唯一索引中,它也不允许索引中的重复值。即,没有两行将具有相同的索引键值。
【讨论】:
以下是几个主要区别:
目的:
过滤选项:
存储选项:
图标:
【讨论】:
键(又名关键字)和索引都是表行的标识符。
虽然索引是并行标识结构,包含一个指向被标识行的指针,而键是原位字段成员。
作为标识符的键意味着唯一性(约束)和 NOT NULL(约束)。
NULL 作为标识符没有意义(因为 null 不能识别任何东西)以及非唯一的识别值。
非聚集索引可以包含真实数据,不作为真实数据的标识符,因此是非唯一的[1]
不幸的是,键或索引(标识符)是由约束(规则或限制)调用的,这里的大多数先前答案都遵循。
键用于以下上下文:
外键是另一个表中的键(它是主键),甚至不是他们经常引用的键。这种使用是通过将“外键约束”术语的快捷方式混淆为“外键”来解释的。
主键约束实际上意味着 NOT NULL 和 UNIQUE 约束 + 引用的列(或组合列)是标识符,不幸的是被“主键”或“主键约束”取代,而这两者都不能被调用(主键)约束或仅(主)键。
更新:
我的相关问题:
[1]
UNIQUE argument for INDEX creation - what's for?
【讨论】:
功能或多或少相同,这取决于您的用例。
假设您希望允许基于 CUSTOMER_ID 和 TEAM_NAME 的重复行。
在这种情况下,您可以同时使用:
idx_customer_id_name (CUSTOMER_ID,TEAM_NAME)unique_key_customer_id_name (CUSTOMER_ID,TEAM_NAME)但您应该考虑根据 CUSTOMER_ID AND TEAM_NAME 获取记录的频率。如果它更多,那么您应该使用唯一索引,因为它有助于更快地检索记录,否则您应该使用唯一键,因为它可以防止无意中听到基于索引的提取。
【讨论】: