【发布时间】:2015-05-20 17:25:55
【问题描述】:
我需要向现有 SQL 表添加一个新的非空列并将其设置为默认值。我知道有两种不同的方法:
ALTER TABLE Foo ADD Col CHAR(1) NOT NULL DEFAULT('N')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')
也就是说,在第二种方法中,有三个单独的批次:首先创建列,然后回填默认值,然后添加not null约束和默认值。
这里的一位开发人员断言,第二种方法更快,锁定时间更短,而方法#1 会产生巨大的日志。我一直在尝试重现这一点,但还没有做到。可能是我的示例数据集太小,而他所描述的内容仅在大型数据库或特定模式下才明显。
与其花时间生成越来越大的数据集并反复修改架构,我想我会求助于这里的专家并得到精简。对于大型数据集,第二种方法实际上更好吗?
【问题讨论】:
标签: sql sql-server query-optimization