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



我们每天向sql server表写入大约100万条记录。当然,记录有一个插入日期和状态字段。我需要不时地删除记录以释放卷上的空间,但在那里留下最后4天的记录。问题是删除需要花费数小时和大量资源。

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

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

有两种方法可以加快删除速度。一种方法是一次删除10000行,这样事务日志就不会增长到很大的规模。根据某些逻辑,您将继续删除前10000行,直到所有满足条件的行都被删除。这可以(取决于您的系统)将删除速度提高100倍。

另一种方法是在表上创建分区。您必须创建一个分区模式和函数,如果您要删除的所有行都在一个分区中,例如一天的销售额,那么删除分区将在元操作中删除所有行,并且只需几秒钟即可完成。分区并不难,但您必须花一些时间来正确设置滚动窗口。

最新更新