在我的情况下,我想维护一个表来存储某种数据,并在一段时间后从第一个表中删除并存储到另一个表。
我想澄清这种情况下的最佳做法是什么。 我在java基础应用程序中使用MySql数据库。
答案 0 :(得分:6)
一般来说,我遵循这个程序。如果我想删除一行。我有一个名为tinyint
的{{1}}列。我将该行的此列标记为deleted
。
这表明该行已被标记为已删除,所以我不要把它拿起来。
稍后(也许每天一次),我运行一个脚本,一次完全删除行或将它们迁移到另一个表......等等。
这很有用,因为每次删除一行(即使它是1行),mysql必须重新索引(它的索引)。这可能需要大量系统资源,具体取决于您的数据大小或索引数。您可能不希望每次都产生这些开销......
答案 1 :(得分:0)
您没有提供足够的信息,但我认为如果两个表都具有相同的数据结构,那么您可以避免使用两个表。只需在第一个表中添加另一列,并为这些特定的第二个表记录设置状态/类型。
例如:
id | Name | BirthDate | type
------------------------------------
1 | ABC | 01-10-2001 | firsttable
2 | XYZ | 01-01-2000 | secondtable
你可以选择这样的记录:
select * from tablename where type='firsttable'
OR
select * from tablename where type='secondtable'
答案 2 :(得分:0)
如果要归档旧数据,应该有一种方法可以在mysql中设置预定作业。我知道SQL Server中存在大多数数据库所需的功能,所以我想它可以在mySQL中完成。 Shecdule工作在低使用时间运行。让它选择超过一年的所有记录(或您希望保持活动的记录的任何时间)并将它们移动到存档表,然后删除它们。根据您要移动的记录数量,最好每周或每天执行一次。您不希望过期的记录数量如此之大,会对性能产生很大影响,或者使作业耗时太长。
归档,关键是确保您保留所有经常需要的记录,并且不要忘记考虑报告(许多报告需要有数年或两年的数据,不归档记录这些报告应该需要)。然后,您还需要为用户设置一种方式,以便他们在极少数情况下访问存档记录。