SQL Server performance for alter table alter column change data type

最近在搞一个升级脚本,发现有一张业务表中的某些字段长度需要调整,直接使用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相关链接

原文地址:https://www.cnblogs.com/Nuss/p/9119104.html