Mysql 定期删除数据库中超过一个月的所有条目的最有效方法

Mysql 定期删除数据库中超过一个月的所有条目的最有效方法,mysql,database,jpa,jpql,Mysql,Database,Jpa,Jpql,我正试图以最有效的方式管理数据库表,并清除永远无法访问的旧条目。是的,他们可能很容易坚持多年,但我只是想摆脱他们。我可以每月做一次。将我想要保留的条目复制到一个新表中,然后简单地删除旧表,这样会更有效吗。或者查询应该手动删除我设置的阈值之后的每个条目 我正在使用MySQL和JPA/JPQL JEE6,以及实体注释和Java持久性管理器 谢谢单个删除查询将是最有效的解决方案 如果要保存大量数据,则将数据从一个数据库复制到另一个数据库可能会很长时间。这意味着您必须用一个查询(或者多个,如果您想批处理

我正试图以最有效的方式管理数据库表,并清除永远无法访问的旧条目。是的,他们可能很容易坚持多年,但我只是想摆脱他们。我可以每月做一次。将我想要保留的条目复制到一个新表中,然后简单地删除旧表,这样会更有效吗。或者查询应该手动删除我设置的阈值之后的每个条目

我正在使用MySQL和JPA/JPQL JEE6,以及实体注释和Java持久性管理器


谢谢

单个删除查询将是最有效的解决方案

如果要保存大量数据,则将数据从一个数据库复制到另一个数据库可能会很长时间。这意味着您必须用一个查询(或者多个,如果您想批处理)检索所有数据,并在另一个数据库中发出大量insert语句

使用JPQL,您可以发出一个查询来删除所有旧语句,如

DELETE FROM Entity e WHERE e.date = ?

这将转换为单个SQL查询,数据库将负责删除所有不需要的记录。

另一个解决方案是使用设计表,然后您可以使用ALTER table删除或截断旧分区


这比使用DELETE快得多,但它可能会使表的其他用途复杂化。

如果我想保留的是整个表的2%。将这些内容复制到新表,然后删除旧表是否更有意义?中接受的答案有什么问题?这些不是如何删除项目的答案。回答建议永远不要删除那些并不是问题答案的东西。一个提到删除的回复承认它效率低下。如果你一次又一次地运行它,它效率低下。如果您每月运行一次,谁在乎呢?这样的查询不需要O(n)个时间来比较每个值吗?有没有更快的办法?