我想知道什么是动态归档行的最佳解决方案。例如,当用户将任务标记为已完成时,该任务需要存档但仍可访问。
实现这一目标的最佳做法是什么?我应该把它全部留在同一个表中,并从查询中省略完成的任务吗?我担心随着时间的推移,桌子会变得很大(一年或更少的1,000,000行)。或者我应该创建另一个表,即task_archive
并在需要数据时查询该行?
我之前已经问过类似的问题,但大多数问题都是关于同时存档数千行的问题,我只需要知道在标记完成后一次归档1行的最佳方法(及其原因)是什么
答案 0 :(得分:3)
为了速度和易用性,我通常会将行保留在同一个表中(并将其标记为已完成),然后将其移至存档表中。这样,用户不会在现场进行移动的延迟;移动可以在非繁忙时段作为批处理进行。
何时应该采取行动取决于您的申请。例如,如果他们有一个显示“最近完成的任务”的仪表板小部件,它显示过去一周内完成的所有任务(并允许他们深入查看详细信息),那么将行移动到存档可能是有意义的他们完成后一周。或者,如果他们经常需要查看当前学期(对于学术应用程序)的任务,但很少需要查看上一学期的任务,请在学期结束时进行批量移动。
如果表被索引,那么1,000,000行应该不是那么大,老实说。
答案 1 :(得分:0)
您可以使用触发器捕获订单已标记为已完成,从当前表中删除,然后插入存档表。
或者,您可以创建执行存档的存储过程。例如
sp_markcompleted(的taskid)
启动交易;
从oldtable插入newtable select *,其中id = taskid;
从oldtable中删除id = taskid;
提交;