SQL Server 1B +记录表 - 处理upsert的最佳方法?

时间:2018-06-05 20:58:01

标签: sql-server

我工作的公司正在建立一个数据集市,需要在其中维护7年的数据。不幸的是,一张表超过10亿条记录。

我的问题是这样的:保持此表最新的最佳方法是什么? (每日更新或更快)

我知道MERGE声明对此非常有益,但我希望不必为每个MERGE解析10亿条记录。由于我们没有SQL Server的企业版,因此​​表分区已经完成。

任何方向都会非常感激:)

2 个答案:

答案 0 :(得分:0)

这里有几种选择;以上在评论中解释了两个。 答案取决于您要对记录执行的操作。 如果您只想修改最近的记录,最好的方法是将这些记录保存在活动表中,并将其他记录作为存档移动到存档表中。这样,您需要一个预定的作业来将不必要的记录移动到存档表中。

如果您还想要一个报告模块,您可能需要提供一个附加表,其中包含一些数据摘要,以便您可以提取所需的报告。

答案 1 :(得分:0)

您需要认真考虑拆分表格。例如,请参阅operational versus archive范例。

从如此庞大的表中分割数据的第一步是识别clustering index如果它有一个)和所有其他索引,因为你会想要避免导致大量重建和数据转移的操作。

否则,如果你需要来维持现状,并拥有良好的索引(你应该咬住子弹并定义一个,如果他们以某种方式幸存下来而没有一个) ,你可以依靠查询优化器快速index seek(比扫描更好,特别是表扫描,这是你似乎有的担忧)。所以只需编写MERGE语句并确保在ON子句中使用索引(并且不惜一切代价避免使用索引列上的using functions!)。