是时候通过方法将默认值添加到新列

时间:2015-05-20 17:25:55

标签: sql sql-server query-optimization

我需要在现有SQL表中添加一个新的非空列,并将其设置为默认值。我知道有两种不同的方法:

  1. ALTER TABLE Foo ADD Col CHAR(1) NOT NULL DEFAULT('N')

  2. ALTER TABLE Foo ADD Col CHAR(1) GO UPDATE Foo SET Col = 'N' GO ALTER TABLE Foo ALTER COLUMN Col CHAR(1) NOT NULL DEFAULT('N')

  3. 也就是说,在第二种方法中,有三个单独的批次:首先创建列,然后回填默认值,然后添加not null约束和默认值。

    这里的一个开发人员声称第二种方法更快,导致锁定时间更短,而#1方法导致巨大的日志。我一直试图重现这一点,但尚未能够重现。可能是我的样本数据集太小,而他所描述的内容仅在大型数据库或特定模式中显而易见。

    我没有花时间生成越来越大的数据集并反复修改架构,我想我会转向这里的专家并获得瘦身。对于大型数据集,第二种方法实际上更好吗?

1 个答案:

答案 0 :(得分:2)

所以我决定测试一下。
在Sql server 2012上,少于一秒在具有超过1360万条记录的表上执行第一个alter table。

对于第二种方法,它花了 49秒,所以我会说你的开发是错误的。