【问题标题】:Time to add default values to a new column by approach是时候通过方法向新列添加默认值了
【发布时间】:2015-05-20 17:25:55
【问题描述】:

我需要向现有 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')

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

这里的一位开发人员断言,第二种方法更快,锁定时间更短,而方法#1 会产生巨大的日志。我一直在尝试重现这一点,但还没有做到。可能是我的示例数据集太小,而他所描述的内容仅在大型数据库或特定模式下才明显。

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

【问题讨论】:

    标签: sql sql-server query-optimization


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-29
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      相关资源
      最近更新 更多