Sql-Server
在 SQL Server 中,在已經有超過 100 萬條記錄的表上設置預設值的數據庫成本是多少?
注意:我不是 dba。:)
我有一個數據庫表,客戶端需要設置列的預設值。該表中有超過 150 萬條記錄,並且該列已填充到所有現有記錄中(他們現在手動執行此操作)。他們希望在使用者創建的所有新記錄上自動設置此列。
在工作時間設置此列的預設值是否會導致停機或任何重大延遲問題?
為了應用此更改,該過程將需要獲取
SCH-M
鎖,並且一旦獲得鎖,它應該是非常即時的(僅更改元數據。)唯一的風險是,如果您有一個長時間執行的事務正在使用該表,而該
ALTER TABLE
語句等待獲取鎖,則任何其他需要在表上鎖定的後續請求都將在其後面排隊,以防止您的更改請求被餓死。因此,您最終可能會阻塞生產查詢一段時間,直到授予鎖定並進行更改。
如果添加新的預設約束 WITH NOCHECK,它將不會嘗試應用於現有行,只會影響未來的新傳入行。
實際上,根據這個,你甚至不需要 WITH NOCHECK。預設約束永遠不會應用於現有記錄,因此您應該可以添加約束而不會在數據庫上產生任何繁重的負載。