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
виконавці DEFAULT NOT NULL
виконують миттєво навіть на значно більшому столі. Чи є якесь пояснення, чому це моментально? На фізичному диску дані все-таки потрібно записати у всі рядки?
Я спробував розглянути SET STATISTICS IO ON
і план запитів, проте, здається, вони не доступні для операцій DDL.