SQL Server中主键(群集)和群集唯一索引之间的区别

use*_*263 6 sql-server indexing clustered-index primary-key-design

我理解什么是主键和唯一聚簇索引我的问题是为什么在定义唯一聚簇索引时需要主键.只考虑性能良好的数据库设计.

根据我的理解,当我们定义一个集群唯一索引时,它会对数据进行物理排序,这对于表性能是必需的,我们是否定义主键是无关紧要的

Mit*_*eat 6

“为什么定义唯一聚集索引时需要主键”

它不是。

默认情况下,当您在 SQL Server 中声明带有主键的表时,它会在主键上添加聚集索引(如果您没有指定单独的聚集索引)。

但聚集索引不必位于构成表主键的列上。

您可以创建一个表,其中主键具有唯一的非聚集索引,而聚集索引位于其他位置。


Mar*_*ith 6

就SQL Server而言,非可空列上的唯一索引与PK之间没有实际区别.

两者都强制唯一性,可以是群集的或非群集的,并且可以由外键约束引用.

有些工具可能会期望定义主键.

关于聚集索引"物理分类数据"的观点,这有点误解.

仅当CI没有碎片时才会出现这种情况.例如,在页面拆分之后,聚簇索引页面完全可能在文件中出现故障.