删除一百万条记录后该怎么办

Mar*_*son 7 sql-server-2008 delete

我们正在我们的系统中实施一项新功能,这将导致smallint每晚从表中清除大约一百万条记录(每条记录都很小,基本上是一个 GUID、一个日期和四个字段)。基本上它是一个缓存表,一旦数据存在 7 天,我们就会:

DELETE FROM scheduleCache WHERE schDateCreated < '2013-08-26

这将在每晚凌晨 1 点运行,每次运行将清除大约一百万条记录。

对于这样的桌子,我应该注意或做些什么吗?我应该把什么属性放在桌子上,或者我应该定期运行什么程序来“清理”?我以前从未处理过这样的桌子。

该表有一个聚集索引(GUID + 一个smallint字段),我们有每周一次的索引重建,每周日早上运行。

Rem*_*anu 7

删除大部分表的问题远非微不足道的问题。到目前为止,最好的方法是分区。带有滑动窗口的日常分区方案确实是解决此问题的灵丹妙药,请参阅如何在分区表中实现自动滑动窗口

如果您负担不起分区(例如,现场的非企业许可证),那么我建议通过schDateCreated. 如果您需要 GUID+smallint 上的主键,请将其移动到非集群。批量删除(例如TOP 10000),循环删除,以减少日志压力。考虑在手术后更新统计信息。