【问题标题】:What happens when I drop a clustered primary key in SQL 2005在 SQL 2005 中删除集群主键时会发生什么
【发布时间】:2009-04-01 13:35:37
【问题描述】:

我有一个 PK 约束 - 两列上的聚集索引 - 我正在删除它。一个小时后该命令仍在运行。我会认为,因为我只是删除一个约束,所以操作几乎是瞬时的。 当我放弃 PK 时,有人可以向我解释一下幕后实际发生了什么吗?

【问题讨论】:

    标签: sql-server sql-server-2005 primary-key constraints


    【解决方案1】:

    聚集索引不仅仅是“一种约束”,它是一种存储方式。

    当您删除它时,您的数据将从集群存储重新排序到堆存储

    正在更新其他索引以引用 RID 而不是 PRIMARY KEY 值。

    【讨论】:

      【解决方案2】:

      聚集索引数据,它可以解释运行时间。

      【讨论】:

      • 你能扩展一下吗?删除聚集索引 pk 约束不会删除数据本身(至少我会遇到麻烦)。您的意思是数据正在重新排序?
      • 聚集索引决定了数据的物理排列方式。当你放下它时,数据会重新排列——但不会被删除,不用担心。
      • 好的。那为什么还要费心重新安排呢?如果我不指定订单,为什么还要费心自己编?
      • 顺便说一句,这就是为什么当有时您有更好的候选者(例如可能在范围查询中使用的日期)时,将 PK 作为聚集索引通常是一种浪费。
      • 其实这是一个很好的问题,没有聚集索引的表的“默认”数据排列是什么。我不知道,我会检查我的内部书,看看我是否能找到。
      【解决方案3】:

      “CLUSTERED”索引将按物理顺序将表的记录写入硬盘上。因此,删除或更改该索引可能会导致 SQL Server 基本上对您的硬盘进行“碎片整理”(重新排序)(嗯,至少是该表的数据所在的部分)。

      请注意,这个答案并不完全是技术性的......但它的目的是给你“哦,这有点像正在发生的事情”的答案,这通常已经足够好了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多