最近在搞一个升级脚本,发现有一张业务表中的某些字段长度需要调整,直接使用alter table alter column进行修改发现修改一列要用十几分钟!!!两三个列那用时简直不能容忍啊!google了一下,相关链接参考文末stackoverflow问答。
测试环境配置
- 表中数据量100多万;
- 虚拟机4核16G内存400G硬盘;
优化步骤
- 1.删除修改列关联的index和constraints;
- 2.添加一个新的可空列,类型使用你要修改的类型;
- 3.用要修改的列update新增加的这个列(多个列时节省时间更可观);
- 4.delete要修改的列;
- 5.rename第2步中所见的新列;
简单示例
alter table myTable add myNewColumn int null;
while 1=1
begin
update top (100000) myTable
set
myNewColumn = myOldColumn
where
myNewColumn is null;
if @@ROWCOUNT = 0 break;
end
alter table myTable drop column myOldColumn;
EXEC sp_RENAME '[myTable].[myNewColumn]', 'myOldColumn', 'COLUMN'
Stackoverflow相关链接