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

7
我了解什么是主键和唯一聚集索引,我的问题是在定义唯一聚集索引时为什么需要主键。只考虑性能良好的数据库设计。
根据我的理解,当我们定义聚集唯一索引时,它会对数据进行物理排序,这对表的性能至关重要,无论我们是否定义主键都没有影响。

1
区别:简而言之,一个是主键,而另一个不是。 - geomagas
2
主键是一个逻辑构造,用于唯一可靠地标识表中的每一列。聚集索引是SQL Server处理存储的物理实现细节。 - marc_s
2个回答

8

对于SQL Server而言,在非空列上创建唯一索引和创建主键没有实际区别。

两者都强制唯一性,可以聚集或非聚集,并且可以被外键约束引用。

但某些工具可能期望有一个定义为主键的索引。

关于你提到的聚集索引“物理排序数据”的观点,这是一个误解。

只有当聚集索引没有碎片时才是真的。例如,在分页之后,聚集索引页在文件中可能是无序的。


那是海报所问的吗? - Mitch Wheat
1
@MitchWheat - 标题似乎是这样表明的, - Martin Smith

6
“为什么定义唯一聚集索引时需要主键”并不是必须的。
在SQL Server中,当您声明一个带有主键的表时,默认情况下会在主键上添加一个聚集索引(如果没有指定单独的聚集索引)。
但聚集索引不一定要在组成表的主键列上。
您可以创建一个具有唯一非聚集索引的主键表,并在其他地方创建聚集索引。

你可以创建一个没有聚集索引的表。 - ypercubeᵀᴹ
实际上 - 被称为堆。 - Mitch Wheat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接