CREATE TABLE TestTab (ID INT IDENTITY(1,1), st nvarchar(100))
INSERT INTO TestTab (st) values ('a')
INSERT INTO TestTab (st) values ('b')
INSERT INTO TestTab (st) values ('c')
INSERT INTO TestTab (st) values ('d')
INSERT INTO TestTab (st) values ('e')
INSERT INTO TestTab (st) SELECT TOP 10000 st from testtab
GO 30
ALTER TABLE TestTab ADD newcol nvarchar(10) DEFAULT 'newcol'
UPDATE TestTab SET newcol = 'newcol' --6 sec
ALTER TABLE TestTab ADD newcol1 nvarchar(10) DEFAULT 'newcol1' NOT NULL
DROP TABLE TestTab
当我执行这个测试脚本中,ALTER
有UPDATE
需要6秒,这是可以理解的。
但是,即使在更大的表上,ALTER
with DEFAULT NOT NULL
语句也会立即执行。为什么这是瞬间有什么解释?在物理磁盘上,仍然需要将数据写入所有行吗?
我尝试查看SET STATISTICS IO ON
和查询计划,但是这些似乎不适用于DDL操作。