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
Когда я выполняю этот тестовый сценарий, команда ALTERwith UPDATEзанимает 6 секунд, что понятно.
Тем не менее, ALTERс DEFAULT NOT NULLИсполняет мгновенно даже на гораздо большем столе. Есть ли объяснение, почему это происходит мгновенно? На физическом диске данные все еще должны быть записаны во все строки, верно?
Я попытался взглянуть на SET STATISTICS IO ONплан запроса, но, похоже, он недоступен для операций DDL.

