【发布时间】:2012-11-11 06:32:39
【问题描述】:
我需要添加一列,对于所有现有行,该值为 1,对于所有新行,该值默认为 0
很简单,我已经创建了一个脚本
ALTER TABLE Table ADD Column1 BIT NOT NULL DEFAULT 0
GO
UPDATE Table SET Column = 1
GO
在 400K 行数据集上更新查询需要 10 多分钟。 这里的开销在哪里?
我怀疑我可以添加列,使默认值为 1,然后在不到 10 秒的计算时间内将默认值更改为 0(并且可能会更改脚本以在下一个测试阶段这样做)。
【问题讨论】:
-
该死的开销在哪里,如果没有我建议的解决方法,如何优化。
-
哪一部分需要 10 分钟?第一个查询还是第二个查询?
-
更新语句需要 10 分钟,alter table 几乎是瞬时的。
-
添加的列完全如图所示,因此它不会超出 SQL Server 执行的任何内部索引的索引。
-
@Oded 索引列是否会加快
update查询的速度,是否类似于++i与i++,其中值是就地更新而不是读取然后更新?
标签: sql tsql sql-server-2005