唯一索引或唯一键?

问题描述 投票:37回答:5

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

sql-server database-design unique-constraint unique-index
5个回答
29
投票

独特的作品不是差异所在。索引和键不是一回事,也不具有可比性。

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

来自文档:

Unique Index

在表或视图上创建唯一索引。唯一索引是不允许两行具有相同索引键值的索引。视图上的聚簇索引必须是唯一的

Unique key (Constraint)

您可以使用UNIQUE约束来确保在不参与主键的特定列中不输入重复值。尽管UNIQUE约束和PRIMARY KEY约束都强制实施唯一性,但如果要强制实施不是主键的列或列组合的唯一性,请使用UNIQUE约束而不是PRIMARY KEY约束。


20
投票

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

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

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

4
投票

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

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


0
投票

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

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

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

密钥用于以下方面:

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

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

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


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


-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.