使用分区表删除数百万条记录?

时间:2015-08-04 15:18:15

标签: sql-server partitioning

我们每天将大约100万条记录写入sql server表。 记录有一个insertdate和status字段,当然还有其他字段。 我需要不时删除记录以释放卷上的空间,但留下最后4天的记录。 问题是删除需要数小时和大量资源。

我考虑过在insertdate上设置分区字段的分区表,但我从未使用过那种表。

如何使用较少的CPU /磁盘资源实现目标,并使解决方案的可能性更小? (我认为任何解决方案都有其自身的缺点,但如果您知道,请解释它们。)

1 个答案:

答案 0 :(得分:2)

您可以采取两种方法来加快删除速度。一种是一次删除10000行,因此事务日志不会增长到庞大的大小。基于某些逻辑,您将删除前10000行,直到所有行满足条件为止。根据您的系统,这可以将删除速度提高100倍。

另一种方法是在表上创建一个分区。你必须创建一个分区模式和功能,如果你要删除的所有行都在一个分区中,让我们说一天的销售,那么删除分区将删除元操作中的所有行,它将只需要几秒钟就可以完成。分区并不难,但你必须花一些时间来正确设置滚动窗口。它超过一小时但不到一周。