我目前有一个由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。
答案 0 :(得分:0)
另一种方法是使用正确的约束创建一个新表。然后复制所有行。最后,删除旧表,然后sp_rename
新表。重命名很快,可以减少停机时间。
您可能需要考虑复制操作期间添加的行。处理这种情况的一种方法是重命名为旧表,然后复制任何新行,并且仅在重命名新表之后。与现场更改表格相比,这仍然会导致更短的停机时间。