唯一的聚集索引和聚集主键之间是否有明显的区别?


Answers:


15

主要区别在于唯一索引可以具有主键不允许的NULL值。是否聚集,这是主键与唯一键的实际实现之间的主要区别。

哦,事实是一张桌子可以有一个PK和许多UK :-)。

两者都是本质上的差异,而不是性能上的差异。否则,我认为没有任何区别。在任何PK或UK之后,SQL Server都会建立一个索引(取决于请求,是否集群),并且索引的使用方式对于源是透明的。


因此,没有必要使用PK,除非(A)作为别名NOT NULL UNIQUE CLUSTERED或(B)突出显示特定的UQ在元数据意义上是“特殊的”,即使RDMS是不可知的?
所有行业的乔恩'02

是的,类似的东西,我本人会选择选项B的:-)。
玛丽安2012年

有一个原因-在不合适的地方停止使用特殊值NULL!
JamesRyan 2013年

@JamesRyan:涵盖所有行业的乔恩#A的原因。
Andriy M 2015年

1
@JamesRyan:是的,在PRIMARY KEY和之间NOT NULL UNIQUE,前者将更难转换NULL UNIQUE(尤其是如果约束已经由外键引用的话)。当然可以防止意外更改NOT NULLNULL
Andriy M

8

在聚集的主键和唯一的聚集索引之间,除了唯一的聚集索引可以具有NULL值之外,没有任何其他区别。

非唯一聚集索引具有一个唯一标识符,对于唯一值,必须处理该唯一标识符。


您是说该表上的其他索引直接指向聚集索引中的行,而忽略了由主键创建的索引吗?
bernd_k 2011年

1
那是对的。非聚簇索引将指向聚簇键,而不是主键。如果主键是非聚集键,那么它所做的就是在不支持NULL值的列上强制执行唯一性,以便可以通过外键使用它。
mrdenny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.