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
Lorsque j'exécute ce script de test, le ALTER
avec UPDATE
prend 6 secondes, ce qui est compréhensible.
Cependant, le ALTER
with the DEFAULT NOT NULL
s'exécute instantanément, même sur une table beaucoup plus grande. Y a-t-il une explication sur la raison pour laquelle cela est instantané? Sur le disque physique, les données doivent encore être écrites sur toutes les lignes, n'est-ce pas?
J'ai essayé de regarder SET STATISTICS IO ON
et le plan de requête, mais ceux-ci ne semblent pas être disponibles pour les opérations DDL.