我有一个将每日销售预测计算到 SQL Server 2008 R2 中的大表(我们称之为Mothership
)的过程。每天,我都会扫描事务数据库上的 CDC 以提取更改,计算增量预测,并将其Delta
与Mothership
. 问题是,性能非常不一致。Mothership
有 25M 行,并且Delta
有 1 - 2M 行。我已经看到合并的性能在 8 分钟到一个小时之间。
MERGE 语句非常简单:
MERGE INTO Mothership AS tgt
USING Delta AS src
ON Mothership.Key1 = Delta.Key1 AND ... AND Mothership.Key4 = Delta.Key4
WHEN MATCHED AND Mothership.UpdateDate < Delta.UpdateDate
(UPDATE all data columns on Mothership)
WHEN NOT MATCHED
(INSERT into Mothership)
我在每个表的 Key1 到 Key4 上都定义了 PRIMARY KEY,但性能仍然很糟糕。MERGE 在性能方面是否存在错误?