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
Kiedy wykonać ten skrypt testowej ALTER
z UPDATE
trwa 6 sekund, co jest zrozumiałe.
Jednak ALTER
z DEFAULT NOT NULL
wykonuje natychmiast, nawet na znacznie większym stole. Czy jest jakieś wyjaśnienie, dlaczego jest to natychmiastowe? Na dysku fizycznym dane nadal muszą być zapisywane we wszystkich wierszach, prawda?
Próbowałem spojrzeć na SET STATISTICS IO ON
plan kwerendy, jednak te wydają się być niedostępne dla operacji DDL.