当您有多个具有不同保留策略和 FK 父子关系的表时,如何管理表清理?在最简单的示例中,最初我有一个具有不同删除语句的表(从 xxx 删除,其中 createddate < Getdate()-30)。然后我将有一个每晚的进程,只运行每个语句并运行它们——这似乎不是一种真正有效的方式——当一个删除依赖于另一个时,我开始遇到问题,但无论出于何种原因,一个都不能快速完成够了,然后由于子关系,我无法清理桌子。也只是想在更强大的系统上获得更好的想法来做到这一点,并且一直没有好运弄清楚谷歌获取示例的内容。
当您有多个具有不同保留策略和 FK 父子关系的表时,如何管理表清理?在最简单的示例中,最初我有一个具有不同删除语句的表(从 xxx 删除,其中 createddate < Getdate()-30)。然后我将有一个每晚的进程,只运行每个语句并运行它们——这似乎不是一种真正有效的方式——当一个删除依赖于另一个时,我开始遇到问题,但无论出于何种原因,一个都不能快速完成够了,然后由于子关系,我无法清理桌子。也只是想在更强大的系统上获得更好的想法来做到这一点,并且一直没有好运弄清楚谷歌获取示例的内容。
从代码的角度来看,在外键上使用级联删除
DELETE
可能是最有效的,因为它基本上是要创建的最少代码,并且会消除您当前手动管理的许多其他语句。它还应该在事务上保持一致,这将解决您提到的问题:“当一个删除依赖于另一个时开始遇到问题,但无论出于何种原因,一个完成的速度不够快”。
但从性能的角度来看,它们可能不是最有效的,因此在发布到生产环境之前要仔细测试。
如果您确实继续手动管理自己的
DELETE
s,那么您应该将每个父表及其子表包装在同一个显式事务中,以修复您提到的当前遇到的逻辑竞争条件。