Sql-Server
TSQL 重新啟用約束需要很長時間
有什麼辦法可以加快重新啟用約束的速度?
作為在我們的倉庫中更新幾個表的工作的一部分,這是在幾個小時內完成的,重新啟用對所述表的約束可能需要一個多小時。剩下的工作,更新,大約需要 5 分鐘。在更新開始之前禁用相同的約束是亞秒級的。
編輯 有問題的工作是在給定日期之前更新數據行的 PK 和 FK,以防止這些記錄出現在報告中。
soft delete
如果你願意,一種記錄方式。大多數表格行大小都是 >130m 行,除了一個超過 370m 行。另外兩個較小。
TableName rows Table_1 371255778 Table_2 131703902 Table_3 131665535 Table_4 131665535 Table_5 131665535 Table_6 131665535 Table_7 19364988 Table_8 1458800
我正在使用以下命令禁用每個表上的約束
ALTER TABLE database.dbo.table_name NOCHECK CONSTRAINT ALL;
以及以下重新啟用它們
ALTER TABLE database.dbo.table_name WITH CHECK CHECK CONSTRAINT ALL;
沒有報告或其他作業同時執行。
重新啟用約束預期行為需要很長時間,還是可以採取一些措施來加快速度?
提前致謝
正如預期的那樣。
例如,CHECK 約束:必須針對每個檢查約束檢查每一行。
如果您有 3 個 CHECK 約束和 3.7 億行,則需要在單個 ALTER 中完成 11.1 億次檢查。
每個 UNIQUE 約束必須在同一個 ALTER 中檢查所有 3.7 億行。
這就是為什麼我通常不在我的 DW 中禁用約束的原因。
這需要太多時間。尤其是當您達到數十億行時。