gpt4 book ai didi

sql - 在 SQL 2005 中更改聚集索引 (PK) 的最佳方法

转载 作者:行者123 更新时间:2023-12-04 13:10:27 25 4
gpt4 key购买 nike

我有一个表,它在两列上有一个聚集索引 - 表的主键。
它的定义如下:

ALTER TABLE Table ADD  CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED 
(
[ColA] ASC,
[ColB] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]

我想删除此聚集索引 PK 并添加如下所示的聚集索引,并使用非聚集索引添加主键约束,如下所示。
CREATE CLUSTERED INDEX [IX_Clustered] ON [Table] 
(
[ColC] ASC,
[ColA] ASC,
[ColD] ASC,
[ColE] ASC,
[ColF] ASC,
[ColG] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, FILLFACTOR = 90, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = OFF) ON [PRIMARY]

ALTER TABLE Table ADD CONSTRAINT
PK_Table PRIMARY KEY NONCLUSTERED
(
ColA,
ColB
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

我打算只删除 PK 聚簇索引,然后添加新的聚簇索引,然后添加非聚簇主键索引,但我了解到删除现有的聚簇索引会导致表数据重新排序(请参阅此处的答案 What happens when I drop a clustered primary key in SQL 2005 ),我认为这没有必要。表正在敲 1 TB,所以我真的想避免任何不必要的重新排序。

我的问题是,从现有结构到所需结构的最佳方式是什么?

编辑:只是想澄清一下。该表为 1TB,不幸的是我没有空间来创建临时表。如果有办法在不创建临时表的情况下做到这一点,请告诉我。

最佳答案

这不是您问题的完整答案,但请确保如果您在表上有任何其他索引,请先删除这些索引。否则,当您删除聚集索引时,SQL Server 将不得不全部重建它们,然后在您重新添加新的聚集索引时再次重建它们。通常的步骤是:

  • 删除所有非聚集索引
  • 删除聚集索引
  • 添加新的聚集索引
  • 添加回所有非聚集索引
  • 关于sql - 在 SQL 2005 中更改聚集索引 (PK) 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/705790/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com