Sql-Server

在 SQL Server 中,在已經有超過 100 萬條記錄的表上設置預設值的數據庫成本是多少?

  • November 22, 2014

注意:我不是 dba。:)

我有一個數據庫表,客戶端需要設置列的預設值。該表中有超過 150 萬條記錄,並且該列已填充到所有現有記錄中(他們現在手動執行此操作)。他們希望在使用者創建的所有新記錄上自動設置此列。

在工作時間設置此列的預設值是否會導致停機或任何重大延遲問題?

為了應用此更改,該過程將需要獲取SCH-M鎖,並且一旦獲得鎖,它應該是非常即時的(僅更改元數據。)

唯一的風險是,如果您有一個長時間執行的事務正在使用該表,而該ALTER TABLE語句等待獲取鎖,則任何其他需要在表上鎖定的後續請求都將在其後面排隊,以防止您的更改請求被餓死。

因此,您最終可能會阻塞生產查詢一段時間,直到授予鎖定並進行更改。

如果添加新的預設約束 WITH NOCHECK,它將不會嘗試應用於現有行,只會影響未來的新傳入行。

實際上,根據這個,你甚至不需要 WITH NOCHECK。預設約束永遠不會應用於現有記錄,因此您應該可以添加約束而不會在數據庫上產生任何繁重的負載。

引用自:https://dba.stackexchange.com/questions/83335