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

时间:2016-05-31 20:35:16

标签: sql-server sql-server-2014

我有一个45M行的表(45 GB数据空间和2GB索引空间)。我添加了一个新列,它立即完成。

alter table T add C char(25)

然后我发现尺寸太小,所以我运行以下查询。

alter table T alter column C varchar(2500)

它跑了一个小时但仍然在运行。 sp_whoisactive显示(此时仍在运行)

reads: 48,000,000
writes: 5,000,000
physical reads: 3,900,000

不应该真的很快吗?

1 个答案:

答案 0 :(得分:1)

我测试了这个案子。您可以使用以下步骤更快地完成此操作:

  1. 使用不同的名称创建相同的表结构(称为Tbl2)
  2. 更改Tbl2上的列
  3. 将数据从Tbl1插入Tbl2
  4. Drop Tbl1(旧表)
  5. 将Tbl2(新的)重命名为Tbl1
  6. 这会给你带来更好的表现。

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

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