在使用 table 时删除大量行

Delete lots of rows while the table is in use

删除数据库中的行是非常昂贵的过程,如果你想删除很多行。

我已经尝试 运行 在具有 2000 万行的 table 上使用 CHECKPOINT 每 50000 行(需要 3-10 秒)批量删除,删除了大约一半,而 table 正在使用中。虽然它完成了工作,但它减慢了对数据库的访问速度,整个系统及时停止响应。

我怎样才能定期删除旧的 cruft 而不会降低系统的速度?

Table里面有很长的行(几百列),按时间排序(最新的是updated/inserted),我们经常select最新的,但是删除最老的。

将过滤后的行复制到临时 tables,截断 table 并插入新截断的 table 效果更好。