唯一索引和唯一键之间有什么区别?
答案 0 :(得分:29)
独特的作品不是差异所在。索引和密钥不是一回事,也无法比较。
密钥是一个数据列或多个列,它们被强制为唯一的约束,主键或显式定义的唯一约束。索引是用于存储数据位置以便更快检索的结构。
来自文档:
在表格上创建唯一索引 视图。唯一索引就是其中之一 没有两行可以拥有 相同的索引键值。一个集群 视图上的索引必须是唯一的
您可以使用UNIQUE约束来制作 确保没有重复的值 在特定列中输入 不参加主键。 虽然都是UNIQUE约束和 PRIMARY KEY约束强制执行 唯一性,使用UNIQUE约束 而不是PRIMARY KEY约束 当你想强制执行 列的唯一性或组合 列,这不是主要的 键。
答案 1 :(得分:20)
这MSDN article comparing the two is what you're after。术语是“约束”是ANSI,但在SQL Server中,您无法禁用唯一约束...
在大多数情况下,没有区别 - 约束是作为封面下的索引实现的。 MSDN文章支持这一点 - 不同之处在于元数据,例如:
答案 2 :(得分:4)
“唯一键”是重言式。密钥(AKA“候选密钥”)是数据库的逻辑特征 - 一种强制表中一组属性唯一性的约束。
索引是一种物理级功能,旨在以某种方式优化性能。索引有很多种类型。
答案 3 :(得分:0)
键(aka关键字)和索引都是表格行的标识符 虽然索引是并行识别结构,包含指向已识别行的指针,而键是原位字段成员。
密钥作为标识符,表示唯一性(约束)和NOT NULL(约束)。 在NULL中没有任何意义作为标识符(因为null不能识别任何东西)以及非唯一标识值 非聚集索引可以包含实际数据,不作为实际数据的标识符,因此是非唯一的[1]
不幸的做法是通过约束(规则或限制)调用密钥或索引(标识符),这是之前的大多数答案。
键用于以下语境:
外键是另一个表中的键(它是主键),甚至不是它们经常引用的键。通过将“外键约束”术语的快捷方式混淆为“外键”来解释这种用法。
主键约束实际上意味着NOT NULL和UNIQUE约束+引用列(或组合列)是标识符,并且不幸地被“主键”或“主键约束”替换,而它们两者都不能仅被调用(主键)约束或仅(主键)键。
更新:
我的相关问题:
[1]
UNIQUE argument for INDEX creation - what's for?
答案 4 :(得分:0)
功能大致相同,这取决于您的用例。
假设您要允许基于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提取记录的频率。如果更多,则应使用唯一索引,因为这将有助于更快地检索记录;否则,应使用唯一键,因为它将防止基于索引的窃听。
答案 5 :(得分:0)
以下是几个关键区别:
目的:
过滤器选项:
存储选项:
图标:
答案 6 :(得分:-1)
唯一键:这是对数据库施加限制的约束。该限制是它不允许重复值。例如,如果要选择一列作为主键,则它应为NOT NULL&唯一的。
唯一索引:这是一个在数据库上执行查询时提高性能的索引。在唯一索引中,它也不允许索引中的重复值。 ie.no两行将具有相同的索引键值。