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
และแผน Query แต่ดูเหมือนว่าจะไม่พร้อมใช้งานสำหรับการดำเนินการ DDL