1

我目前有一个由 3 列组成的复合 PK(集群),我们称它们为 A、B 和 C,所有这些都需要确保唯一性。由于外部因素,我需要通过删除当前 PK 并在新列上添加新索引来修改此表。

这是由标准完成的

ALTER TABLE Table_Name DROP CONSTRAINT PK_Name

CREATE INDEX Index_Name ON Table_Name (NewColumn)

问题是该表很大(大约 7000 万行)并且对当前 PK 执行删除然后添加新索引需要一个多小时。有没有办法以更高效的方式解决这种情况?

该表只有其复合 PK,因此无需担心 NCI 或 FK 和其他依赖项。我正在使用 SQL Server 2008。

4

1 回答 1

0

一种替代方法是创建一个具有正确约束的新表。然后复制所有行。最后,您删除旧表和sp_rename新表。重命名速度很快,可以减少停机时间。

您可能需要考虑在复制操作期间添加的行。解决这个问题的一种方法是重命名为旧表,然后复制任何新行,然后再重命名新表。与就地更改表相比,这仍然会导致更短的停机时间。

于 2012-12-07T12:51:01.913 回答