是时候通过方法向新列添加默认值了

Posted

技术标签:

【中文标题】是时候通过方法向新列添加默认值了【英文标题】:Time to add default values to a new column by approach 【发布时间】: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 会产生巨大的日志。我一直在尝试重现这一点,但还没有做到。可能是我的示例数据集太小,而他所描述的内容仅在大型数据库或特定模式下才明显。

与其花时间生成越来越大的数据集并反复修改架构,我想我会求助于这里的专家并得到精简。对于大型数据集,第二种方法实际上更好吗?

【问题讨论】:

【参考方案1】:

所以我决定测试一下。 在 Sql server 2012 上,在具有超过 1360 万条记录的表上执行第一个更改表需要 不到一秒

对于第二种方法,需要 49 秒,所以我会说您的开发人员错了。

【讨论】:

以上是关于是时候通过方法向新列添加默认值了的主要内容,如果未能解决你的问题,请参考以下文章

如何更改表以添加具有当前日期默认值的新列日期?

mysql 设置了默认值了为啥还是会报column cannot be null

mysql 设置了默认值了为啥还是会报column cannot be null

向数据框中的新列添加值

使用流式 API 更新新列后无法向 BigQuery 表插入新值

自定义控件如何给特殊类型的属性添加默认值 z(转)