有什么办法可以加快重新启用约束的速度吗?
作为更新我们仓库中几个表的工作的一部分,这是在非工作时间完成的,重新启用对所述表的约束可能需要一个多小时。剩下的工作,更新,大约需要 5 分钟。在更新开始之前禁用相同的约束是亚秒级的。
编辑
有问题的工作是在给定日期之前更新数据行的 PK 和 FK,以防止这些记录出现在报告中。soft delete
如果您愿意,可以使用一种记录方式。
除了一个超过 370m 行的表外,大多数表的行大小都大于 130m 行。另外两个较小。
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 中禁用约束。
这需要太多时间。特别是当你达到数十亿行时。