在SQL中保存大型月度数据备份的最佳方法是什么?

时间:2016-04-21 14:05:36

标签: sql-server database

我在一个程序中存储了有关我大学网络连接的信息,并且我被要求创建一个报告,显示这些连接随时间的状态变化。我正在考虑添加另一个具有当前连接信息的表和添加数据的日期,因此在运行报表时,它只是抓住该日期的数据,但我担心报告可能在一对夫妇之后变慢几个月,因为它将每月增加约50,000行。有一个更好的方法吗?我们使用Microsoft SQL Server。

1 个答案:

答案 0 :(得分:0)

这取决于您持有事实历史数据的原因。

如果原因是:

  • 对于报告需求,您可以将其保存在同一个表中 添加两个日期列FromDateToDate将删除 需要稍后加入活动和历史数据表。
  • 仅供参考,然后将它放在不同的地方是有意义的 表,因为它可能会降低您的索引的性能 活动表。

我将重点介绍缓慢变化维度(SCD)类型2方法,该方法通过维护多个版本的记录来跟踪数据历史记录,并使用EndDate或标记来标识活动记录。此方法允许跟踪任何数量的历史记录,因为每次插入新记录时,旧记录都会填充EndDate

第1步:对于重新加载的事实UPDATE IsActive = 0,要保留记录的历史记录,并将EndDate填充为当前日期。

merge ActiveTable as T
using DataToBeLoaded as D  
    on  T.ID = D.ID
         and 
        T.isactive = 1  -- Current active entry
  when matched then
    update set T.IsActive = 0,
               T.EndDate = GETDATE();

第2步:将最新数据插入ActiveTable,其中IsActive = 1FromDate为当前日期。

免责声明:以下使用SCD 2的方法可能会使您的数据仓库变得庞大。但是,我认为它不会对你的场景产生很大影响。