动态存档行

时间:2010-06-02 16:43:44

标签: mysql archive

我想知道什么是动态归档行的最佳解决方案。例如,当用户将任务标记为已完成时,该任务需要存档但仍可访问。

实现这一目标的最佳做法是什么?我应该把它全部留在同一个表中,并从查询中省略完成的任务吗?我担心随着时间的推移,桌子会变得很大(一年或更少的1,000,000行)。或者我应该创建另一个表,即task_archive并在需要数据时查询该行?

我之前已经问过类似的问题,但大多数问题都是关于同时存档数千行的问题,我只需要知道在标记完成后一次归档1行的最佳方法(及其原因)是什么

2 个答案:

答案 0 :(得分:3)

为了速度和易用性,我通常会将行保留在同一个表中(并将其标记为已完成),然后将其移至存档表中。这样,用户不会在现场进行移动的延迟;移动可以在非繁忙时段作为批处理进行。

何时应该采取行动取决于您的申请。例如,如果他们有一个显示“最近完成的任务”的仪表板小部件,它显示过去一周内完成的所有任务(并允许他们深入查看详细信息),那么将行移动到存档可能是有意义的他们完成后一周。或者,如果他们经常需要查看当前学期(对于学术应用程序)的任务,但很少需要查看上一学期的任务,请在学期结束时进行批量移动。

如果表被索引,那么1,000,000行应该不是那么大,老实说。

答案 1 :(得分:0)

您可以使用触发器捕获订单已标记为已完成,从当前表中删除,然后插入存档表。

或者,您可以创建执行存档的存储过程。例如

sp_markcompleted(的taskid)

启动交易;

从oldtable插入newtable select *,其中id = taskid;

从oldtable中删除id = taskid;

提交;