我在一个程序中存储了有关我大学网络连接的信息,并且我被要求创建一个报告,显示这些连接随时间的状态变化。我正在考虑添加另一个具有当前连接信息的表和添加数据的日期,因此在运行报表时,它只是抓住该日期的数据,但我担心报告可能在一对夫妇之后变慢几个月,因为它将每月增加约50,000行。有一个更好的方法吗?我们使用Microsoft SQL Server。
答案 0 :(得分:0)
这取决于您持有事实历史数据的原因。
如果原因是:
FromDate
和ToDate
将删除
需要稍后加入活动和历史数据表。我将重点介绍缓慢变化维度(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 = 1
和FromDate
为当前日期。
免责声明:以下使用SCD 2的方法可能会使您的数据仓库变得庞大。但是,我认为它不会对你的场景产生很大影响。