【发布时间】:2011-04-09 09:30:39
【问题描述】:
PRIMARY KEY 关键字与 SQL Server 中的聚簇索引有何关系?
(有些人似乎想回答这个问题而不是a different question I asked,所以我给他们一个更好的地方回答。)
【问题讨论】:
标签: sql-server performance primary-key clustered-index physical-design
PRIMARY KEY 关键字与 SQL Server 中的聚簇索引有何关系?
(有些人似乎想回答这个问题而不是a different question I asked,所以我给他们一个更好的地方回答。)
【问题讨论】:
标签: sql-server performance primary-key clustered-index physical-design
PRIMARY KEY关键字与 MS SqlServer 中的聚集索引有何关系?
默认情况下,PRIMARY KEY 被实现为聚集索引。但是,您也可以通过非聚集索引来支持它(在其声明中指定 NONCLUSTERED 选项)
聚集索引不一定是PRIMARY KEY。它甚至可以是非唯一的(在这种情况下,一个名为 uniqueifier 的隐藏列被添加到每个键中)。
请注意,聚集索引并不是真正的索引(即,表的投影顺序不同,引用原始记录)。它是表本身,原始记录是有序的。
当您创建聚集索引时,您并没有真正“创建”任何可以从表中删除的内容。您只需重新排列表本身并更改记录的存储方式。
【讨论】:
主键,顾名思义,是表中一行的primary 唯一标识符。聚集索引根据索引对数据进行物理排序。虽然 SQL Server 默认会聚集一个主键,但两者之间并没有直接关系。
【讨论】:
表的聚集索引通常定义在主键列上。
但这并不是一个严格的要求。
来自MSDN:
当您创建 PRIMARY KEY 约束时,如果表上的聚簇索引尚不存在并且您没有指定唯一的非聚簇索引,则会自动创建一个或多个列上的唯一聚簇索引。
还有:
如果指定了非聚集主键约束,您可以在主键列以外的列上创建聚集索引。
【讨论】: