Maz*_*har 1 sql-server constraint sql-server-2008-r2
有什么办法可以加快重新启用约束的速度?
作为更新我们仓库中几个表的工作的一部分,这是在几个小时内完成的,重新启用对所述表的约束可能需要一个多小时。其余的工作,即更新,大约需要 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
Run Code Online (Sandbox Code Playgroud)
我正在使用以下命令禁用每个表上的约束
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 中禁用约束的原因。
这需要太多时间。尤其是当您达到数十亿行时。
归档时间: |
|
查看次数: |
918 次 |
最近记录: |