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
Wenn ich dieses Testskript ausführe, dauert das ALTER
mit UPDATE
6 Sekunden, was verständlich ist.
Allerdings wird das ALTER
mit dem DEFAULT NOT NULL
sofort auch auf einem viel größeren Tisch ausgeführt. Gibt es eine Erklärung dafür, warum dies augenblicklich geschieht? Auf der physischen Festplatte müssen noch Daten in alle Zeilen geschrieben werden, oder?
Ich habe versucht, SET STATISTICS IO ON
den Abfrageplan zu betrachten, aber diese scheinen für DDL-Operationen nicht verfügbar zu sein.