我在过去5年的SQL Server
中有大约100亿个系统(基础设施)数据,我想在每个周末逐步清除这些数据,同时还运行其他工作,这些工作正在进行维护并插入数据特定的一天进入warehouse
。
清除过程将每周末删除约600,000条记录,但它会扫描整个数据仓库,以便取出这600,000条记录。
请提出最佳方法。
答案 0 :(得分:1)
SQL Server中的分区切换使您可以立即在表中交换数据块。有很多很好的教程,这里有一个:https://www.brentozar.com/archive/2013/01/sql-server-table-partitioning-tutorial-videos-and-scripts/
SQL Server中的分区基于分区方案在物理上分隔表,最常见的是使用日期范围。因此,在表中交换分区更像是物理交换机的逻辑交换机,因此非常快。
如果您没有SQL Server Enterprise Edition,则应确保使用您用于识别要删除的记录的字段编制索引。对于大删除,打破删除可以提高性能,因此您可能创建一个循环,一次删除1天,7次,而不是一次删除整个星期。
答案 1 :(得分:0)
我会采用文章中提到的增量方法:
http://sqlperformance.com/2013/03/io-subsystem/chunk-deletes
每个批次要删除的记录数是可配置的。您希望在测试环境中测试不同的大小,以获得数据集的最佳大小。