从数据库表中删除数据的最佳做法是什么?

时间:2011-08-11 08:49:00

标签: mysql database database-design rdbms

在我的情况下,我想维护一个表来存储某种数据,并在一段时间后从第一个表中删除并存储到另一个表。

我想澄清这种情况下的最佳做法是什么。 我在java基础应用程序中使用MySql数据库。

3 个答案:

答案 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工作在低使用时间运行。让它选择超过一年的所有记录(或您希望保持活动的记录的任何时间)并将它们移动到存档表,然后删除它们。根据您要移动的记录数量,最好每周或每天执行一次。您不希望过期的记录数量如此之大,会对性能产生很大影响,或者使作业耗时太长。

归档,关键是确保您保留所有经常需要的记录,并且不要忘记考虑报告(许多报告需要有数年或两年的数据,不归档记录这些报告应该需要)。然后,您还需要为用户设置一种方式,以便他们在极少数情况下访问存档记录。