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
Khi tôi thực hiện kịch bản thử nghiệm này, ALTER
với UPDATE
mất 6 giây mà là điều dễ hiểu.
Tuy nhiên, ALTER
với các DEFAULT NOT NULL
thực thi ngay lập tức ngay cả trên một bảng lớn hơn nhiều. Có bất kỳ lời giải thích về lý do tại sao điều này là tức thời? Trên đĩa vật lý, dữ liệu vẫn cần được ghi vào tất cả các hàng phải không?
Tôi đã thử xem xét SET STATISTICS IO ON
và kế hoạch Truy vấn, tuy nhiên những kế hoạch đó dường như không khả dụng cho các hoạt động DDL.