唯一索引或唯一键?

时间:2010-09-25 16:49:58

标签: sql-server database-design unique-constraint unique-index

唯一索引和唯一键之间有什么区别?

7 个答案:

答案 0 :(得分:29)

独特的作品不是差异所在。索引和密钥不是一回事,也无法比较。

密钥是一个数据列或多个列,它们被强制为唯一的约束,主键或显式定义的唯一约束。索引是用于存储数据位置以便更快检索的结构。

来自文档:

Unique Index

  

在表格上创建唯一索引   视图。唯一索引就是其中之一   没有两行可以拥有   相同的索引键值。一个集群   视图上的索引必须是唯一的

Unique key (Constraint)

  

您可以使用UNIQUE约束来制作   确保没有重复的值   在特定列中输入   不参加主键。   虽然都是UNIQUE约束和   PRIMARY KEY约束强制执行   唯一性,使用UNIQUE约束   而不是PRIMARY KEY约束   当你想强制执行   列的唯一性或组合   列,这不是主要的   键。

答案 1 :(得分:20)

MSDN article comparing the two is what you're after。术语是“约束”是ANSI,但在SQL Server中,您无法禁用唯一约束...

在大多数情况下,没有区别 - 约束是作为封面下的索引实现的。 MSDN文章支持这一点 - 不同之处在于元数据,例如:

  • 调整FILLFACTOR
  • INCLUDE提供更有效的覆盖索引(复合约束)
  • 过滤后的索引就像对行子集的约束/忽略多个null等。

答案 2 :(得分:4)

“唯一键”是重言式。密钥(AKA“候选密钥”)是数据库的逻辑特征 - 一种强制表中一组属性唯一性的约束。

索引是一种物理级功能,旨在以某种方式优化性能。索引有很多种类型。

答案 3 :(得分:0)

键(aka关键字)和索引都是表格行的标识符 虽然索引是并行识别结构,包含指向已识别行的指针,而键是原位字段成员。

密钥作为标识符,表示唯一性(约束)和NOT NULL(约束)。 在NULL中没有任何意义作为标识符(因为null不能识别任何东西)以及非唯一标识值 非聚集索引可以包含实际数据,不作为实际数据的标识符,因此是非唯一的[1]

不幸的做法是通过约束(规则或限制)调用密钥或索引(标识符),这是之前的大多数答案。

键用于以下语境:

  • 备用aka又名候选键,可以是多个
  • 复合键(合并了几个字段)
  • 主键(超级键),自然键或代理键,只有一个,真正用于参照完整性
  • 外键

外键是另一个表中的键(它是主键),甚至不是它们经常引用的键。通过将“外键约束”术语的快捷方式混淆为“外键”来解释这种用法。

主键约束实际上意味着NOT NULL和UNIQUE约束+引用列(或组合列)是标识符,并且不幸地被“主键”或“主键约束”替换,而它们两者都不能仅被调用(主键)约束或仅(主键)键。


更新:
我的相关问题:
[1]
UNIQUE argument for INDEX creation - what's for?

答案 4 :(得分:0)

功能大致相同,这取决于您的用例。

假设您要允许基于CUSTOMER_ID和TEAM_NAME的重复行。

在这种情况下,您可以同时使用:

  • 唯一索引idx_customer_id_nameCUSTOMER_IDTEAM_NAME
  • 唯一键unique_key_customer_id_nameCUSTOMER_IDTEAM_NAME

但是您应该考虑根据CUSTOMER_ID AND TEAM_NAME提取记录的频率。如果更多,则应使用唯一索引,因为这将有助于更快地检索记录;否则,应使用唯一键,因为它将防止基于索引的窃听。

答案 5 :(得分:0)

以下是几个关键区别:

目的:

  • 唯一键:确保表级别数据的完整性,因此不能在表中输入任何重复项。不用于查询计划,不会有助于查询速度。 (其用途与主键不同,主键唯一地标识每条记录以进行数据操作(例如更新/删除等)。在复杂的表中,唯一键可以是几列的组合,并且使用唯一键来进行效率低下识别交易记录。因此,主键是识别表中特定记录的快速方法,而唯一键可确保没有两个记录具有相同的键属性。)
  • 唯一索引:确保索引级数据的唯一性,不能保证表级数据的唯一性,例如如果是过滤索引。用于查询计划和获取数据,从而根据使用/查询的列加快查询速度。

过滤器选项:

  • 唯一键:过滤器选项不可用
  • 唯一索引:过滤器选项可用

存储选项:

  • 唯一键:仅文件组
  • 唯一索引:文件组或分区

图标:

  • 唯一键:图标是垂直键[enter image description here]
  • 唯一索引:图标是b树[[enter image description here]

答案 6 :(得分:-1)

唯一键:这是对数据库施加限制的约束。该限制是它不允许重复值。例如,如果要选择一列作为主键,则它应为NOT NULL&唯一的。

唯一索引:这是一个在数据库上执行查询时提高性能的索引。在唯一索引中,它也不允许索引中的重复值。 ie.no两行将具有相同的索引键值。