删除复合PK并添加新索引非常慢

时间:2012-12-07 12:38:29

标签: sql sql-server-2008 composite-primary-key

我目前有一个由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。

1 个答案:

答案 0 :(得分:0)

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

您可能需要考虑复制操作期间添加的行。处理这种情况的一种方法是重命名为旧表,然后复制任何新行,并且仅在重命名新表之后。与现场更改表格相比,这仍然会导致更短的停机时间。