2011-08-11 99 views
2

在我的情况下,我想维护一个表用于存储某种数据,并在一段时间后从第一个表中删除并存储到另一个表中。从数据库表中删除数据的最佳做法是什么?

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

+0

这一切都取决于场景。向我们提供一些关于索引可能受到多大影响的更多信息。 –

+1

如果您正在归档数据,那么您可能希望在归档后将其从数据库中完全删除,而不是“移动它到另一个表“ –

+0

@Preet两个表都有可能有数千行数据。实际上我想要的是,在某个业务流程从第一个表中删除数据并添加到另一个表之后。我想澄清在删除部分。什么是最好的办法做到这一点,我不得不担心第一个表的主键(自动增量)。因为它又一次充满了新的数据集。 – Lan

回答

6

一般来说,我遵循这个程序。 Incase我想删除一行。我有一个名为deletedtinyint列。我将该列标记为true

这表明该行已被标记为已删除,所以我没有,拿起它。

后来(也许每天一次),我运行一个脚本,在单杆或者完全删除该行或将其迁移到另一台...等

这是因为每次你删除一个有用行(即使它是1行),mysql必须重新索引(它是索引)。这可能需要大量系统资源,具体取决于您的数据大小或索引数量。您可能不希望每次都产生这些开销...

+1

添加视图以仅选择应用程序用于显示数据的活动记录。这样,您就不会在物理删除或移动到归档表之前忘记并显示已删除的记录。 – HLGEM

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' 
0

如果你正在归档旧数据,应该有办法在mysql中设置预定作业。我知道SQL Server中有这种功能,它是大多数数据库需要的功能,所以我认为它可以在mySQL中完成。将工作安排在低使用时间运行。让它选择超过一年的所有记录(或任何想要保持活动的记录时间量)并将它们移动到归档表中,然后删除它们。根据您要移动的记录数量,最好每周或每天进行一次。您不希望过期的记录数量过大,会极大地影响性能或使作业耗时过长。关键在于确保您保留所有经常需要的记录,并且不要忘记考虑报告(许多报告需要有一年或两年的数据价值,不要档案记录这些报告应该需要)。然后,您还需要设置一种方法,让用户在极少数情况下可以访问存档记录,以便他们查看这些记录。

相关问题