我工作的公司正在建立一个数据集市,需要在其中维护7年的数据。不幸的是,一张表超过10亿条记录。
我的问题是这样的:保持此表最新的最佳方法是什么? (每日更新或更快)
我知道MERGE
声明对此非常有益,但我希望不必为每个MERGE
解析10亿条记录。由于我们没有SQL Server的企业版,因此表分区已经完成。
任何方向都会非常感激:)
答案 0 :(得分:0)
这里有几种选择;以上在评论中解释了两个。
答案取决于您要对记录执行的操作。
如果您只想修改最近的记录,最好的方法是将这些记录保存在活动表中,并将其他记录作为存档移动到存档表中。这样,您需要一个预定的作业来将不必要的记录移动到存档表中。
如果您还想要一个报告模块,您可能需要提供一个附加表,其中包含一些数据摘要,以便您可以提取所需的报告。
答案 1 :(得分:0)
您需要认真考虑拆分表格。例如,请参阅operational versus archive范例。
从如此庞大的表中分割数据的第一步是识别clustering index(如果它有一个)和所有其他索引,因为你会想要避免导致大量重建和数据转移的操作。
否则,如果你需要来维持现状,并拥有良好的索引(你应该咬住子弹并定义一个,如果他们以某种方式幸存下来而没有一个) ,你可以依靠查询优化器快速index seek(比扫描更好,特别是表扫描,这是你似乎有的担忧)。所以只需编写MERGE
语句并确保在ON
子句中使用索引(并且不惜一切代价避免使用索引列上的using functions!)。