Sql server 改变列大小需要很长时间吗?

Sql server 改变列大小需要很长时间吗?,sql-server,sql-server-2014,Sql Server,Sql Server 2014,我有一个45M行的表(45GB的数据空间和2GB的索引空间)。我添加了一个新专栏,它马上就完成了 alter table T add C char(25) 然后我发现大小太小,所以我运行以下查询 alter table T alter column C varchar(2500) 它运行了一个小时,现在仍在运行。sp_whoisactive shows(目前仍在运行) 这不是很快吗?我测试了这个案例。您可以使用以下步骤加快速度: 使用不同的名称创建相同的表结构(称为Tbl2) 更改Tbl2上

我有一个45M行的表(45GB的数据空间和2GB的索引空间)。我添加了一个新专栏,它马上就完成了

alter table T add C char(25)
然后我发现大小太小,所以我运行以下查询

alter table T alter column C varchar(2500)
它运行了一个小时,现在仍在运行。sp_whoisactive shows(目前仍在运行)


这不是很快吗?

我测试了这个案例。您可以使用以下步骤加快速度:

  • 使用不同的名称创建相同的表结构(称为Tbl2)
  • 更改Tbl2上的列
  • 将数据从Tbl1插入Tbl2
  • 删除Tbl1(旧表)
  • 将Tbl2(新的)重命名为Tbl1
  • 这将为您提供更好的性能

    原因是,更改表中包含数据的列将需要大量的数据传输和数据页对齐。 使用我的解决方案,您只需插入数据,而无需任何页面重组


    如果帖子回答了您的问题,请将is标记为答案

    您可能会得到更好的答案,答案是:不,不。在表的末尾添加列几乎是即时的,如果更改现有列的大小,则需要重新生成表和可能的索引
    reads: 48,000,000
    writes: 5,000,000
    physical reads: 3,900,000