【问题标题】:How does the `primary key` keyword relate to clustered indexes in SQL Server?`primary key` 关键字与 SQL Server 中的聚簇索引有何关系?
【发布时间】:2011-04-09 09:30:39
【问题描述】:

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

(有些人似乎想回答这个问题而不是a different question I asked,所以我给他们一个更好的地方回答。)

【问题讨论】:

    标签: sql-server performance primary-key clustered-index physical-design


    【解决方案1】:

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

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

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

    请注意,聚集索引并不是真正的索引(即,表的投影顺序不同,引用原始记录)。它表本身,原始记录是有序的。

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

    【讨论】:

    • 在创建聚集索引时,确实会创建根索引页和中间页。仍然 +1。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      但这并不是一个严格的要求。

      来自MSDN

      当您创建 PRIMARY KEY 约束时,如果表上的聚簇索引尚不存在并且您没有指定唯一的非聚簇索引,则会自动创建一个或多个列上的唯一聚簇索引。

      还有:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-12
        • 1970-01-01
        • 1970-01-01
        • 2021-01-25
        • 1970-01-01
        • 2018-05-08
        • 2011-10-19
        • 2015-06-14
        相关资源
        最近更新 更多