6

PRIMARY KEY 关键字与 SQL Server 中的聚集索引有何关系?

(有些人似乎想回答这个问题,而不是我问的另一个问题,所以我给他们一个更好的地方这样做。)

4

3 回答 3

9

MS SqlServer中的PRIMARY KEY关键字与聚集索引有何关系?

默认情况下,aPRIMARY KEY被实现为聚集索引。但是,您也可以通过非聚集索引来支持它(指定NONCLUSTERED其声明的选项)

聚集索引不一定是PRIMARY KEY. 它甚至可以是非唯一的(在这种情况下,一个名为的隐藏列uniqueifier被添加到每个键中)。

请注意,聚集索引并不是真正的索引(即以不同方式排序的表的投影,以及对原始记录的引用)。它表本身,按顺序排列了原始记录。

创建聚集索引时,您并没有真正“创建”任何可以从表中删除的内容。您只需重新排列表本身并更改记录的存储方式。

于 2010-09-07T19:59:45.110 回答
6

表的聚集索引通常在主键列上定义。

然而,这并不是一个严格的要求。

来自MSDN

创建 PRIMARY KEY 约束时,如果表上的聚集索引尚不存在并且您未指定唯一的非聚集索引,则会自动在列上创建唯一聚集索引。

和:

如果指定了非聚集主键约束,则可以在主键列以外的列上创建聚集索引。

于 2010-09-07T19:54:31.930 回答
4

顾名思义,主键是表中行的主要唯一标识符。聚集索引根据索引对数据进行物理排序。虽然 SQL Server 默认会聚集一个主键,但两者之间并没有直接关系。

于 2010-09-07T19:58:15.610 回答