2013-10-21 81 views
3

我明白什么是主键和唯一集群索引我的问题是为什么我们在定义唯一集群索引时需要主键。只考虑性能好的数据库设计。SQL Server中主键(集群)和集群唯一索引之间的区别

按我的理解,当我们定义一个聚集唯一索引它的数据物理排序和被需要的表的性能,它是无形的,我们是否定义主键或不

+1

差异:简而言之,一个是主键,另一个不是。 – geomagas

+1

**主键**是一个**逻辑**结构 - 用于唯一可靠地识别表中每一列的键。 **聚集索引**是SQL Server如何处理其存储的**物理**实现细节。 –

回答

4

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

它不是。

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

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

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

+0

...并且您可以拥有一个没有任何聚集索引的表格。确实叫做 –

+0

- 称为堆。 –

5

就SQL Server而言,在不可空列和PK上的唯一索引没有实际区别。

两者都强制唯一性,可以是群集或非群集,并可以通过外键约束引用。

虽然有些工具可能会期望定义一个主键。

关于你指出的聚集索引“物理排序数据”,这有点误解。

这只有在CI具有零碎片时才为真。例如,页面拆分后,聚集索引页面在文件中出现乱序是完全可能的。

+0

是海报的要求吗? –

+1

@MitchWheat - 标题似乎表明如此, –