use*_*408 18 sql sql-server sql-server-2008 sql-server-2008-r2
我在SQL Server 2008 R2中有一个表,其中有近10亿行.我想将两列的数据类型从int更改为bigint.两次ALTER TABLE zzz ALTER COLUMN yyy有效,但速度很慢.如何加快处理速度?我正在考虑将数据复制到另一个表,删除,创建,复制并切换到简单的恢复模式或以某种方式使用光标一次1000行,但我不确定这些是否真的会导致任何改进.
Aar*_*and 29
根据您所做的更改,有时可能更容易采取维护窗口.在该窗口期间(没有人应该能够更改表中的数据),您可以:
UPDATE TOP (10000) ... SET newcol = oldcol WHERE newcol IS NULL)和CHECKPOINT以避免超出日志)这里的关键是它允许您在步骤3中以递增方式执行更新,这在单个ALTER TABLE命令中是无法执行的.
这假设列在数据完整性中没有起主要作用 - 如果它涉及一堆外键关系,则还有更多步骤.
编辑
而且,只是大声问道,我没有做过任何测试(但将其添加到列表中).我想知道页面+行压缩在这里有用吗?如果将INT更改为BIGINT,则在压缩到位的情况下,SQL Server仍应将所有值视为仍适合INT.同样,我还没有测试过这会更快或更慢,或者首先添加压缩需要多长时间.把它扔出去.