你怎么处理旧记录?

时间:2011-02-09 03:46:00

标签: c# asp.net sql-server-2008

许多应用程序累积二进制灰尘 - 随时间累积的记录,永远不会看到光明。我们的应用程序保留聊天记录,仅显示最近5天的此类记录。在一段时间之后运行清理操作将这些旧记录移动到“历史”表是一个好主意。永远不会使用历史表,但只允许我们运行内部统计数据,同时(我假设)可以在主表中保留的那些记录上实现更好的性能。

另外,如果我们构建一个历史表,那么我们是否需要复制我们的表,或者是否有一个隐藏的MS SQL函数会自动创建“影子表”。

2 个答案:

答案 0 :(得分:1)

没有MS SQL函数可以自动创建这样的影子表。它接近分区,但这确实分裂了存储(快/慢),同时仍然将数据保存在一个表中。

您正在寻找的是直接存档和清除。

是一个简单的策略是夜间任务
  1. 更新静态查找表(主表引用)
  2. date < getdate()-6的记录移至历史记录表
  3. 删除已移动的记录
  4. 如果此表具有外键链接to其他表,您将发现除非它们快速增长(罕见),否则不太可能需要清除这些表。另一方面,如果其他表具有到主要的FK,则这是另一回事。在这种情况下,您必须移动所有从属子项,然后是主要子项,然后最后以相反的顺序删除。

答案 1 :(得分:1)

cyberkiwi关于“没有魔力”是正确的,他的建议对于简单数据是好的。当数据复杂时,归档变得复杂。您可能会发现在归档时要对数据进行非规范化,以便您可以删除或修改原始行引用的数据。