如何不断地删除任何比新10个条目更旧的mysql数据库(可能在JPQL/JPA)



我正在寻找一种方法来持续监控和删除最旧的条目,使数据库永远不会大于某个值。例如,我只对最近的10个感兴趣,超过这个数字的所有内容都应该删除。数据库通过各种程序更新,但是执行监视和删除的程序可能是带有JPA的Java EE应用程序。我不知道这将在实现的哪一层完成。如果MySQL内置了这样做的管理,如果我必须编写一个这样做的查询,或者如果Java有这样做的功能。

编辑:我正在使用一个自动递增的id,可以用来确定删除的阈值。

这是一个复杂的问题,因为除非您的表没有链接到任何其他表,否则您很可能会让表a中最新的行引用表B中非常旧的行。在这种情况下,尽管表B的行非常旧,但您不能在不破坏数据库一致性的情况下删除它。

"持续"做这件事更难(读作:不可能)。我将首先

  • 检查是否真的需要。磁盘很便宜,企业数据库中的10个条目真的没什么。
  • 实现一些清除机制,并在数据库没有被其他人使用时时不时地执行它。

我将在不了解表模式的情况下尝试一下:

DELETE FROM MyTable WHERE Id NOT IN (SELECT TOP 10 Id FROM MyTable ORDER BY Date DESC)

这是非常低效的运行所有的时间,可能有一个mysql特定的TRUNCATE做得更好。如果将读取限制为所需的10行,并且只定期归档/删除无关的数据,可能会获得更好的性能。

最新更新