毎日の売上予測を SQL Server 2008 R2 の大きなテーブルに計算するプロセスがあります (それを と呼びましょうMothership
)。毎日、トランザクション データベースの CDC をスキャンして変更を抽出し、差分予測を計算して、これDelta
をMothership
. 問題は、パフォーマンスが非常に一貫していないことです。Mothership
25M の行があり、Delta
1 ~ 2M の行があります。マージで 8 分から 1 時間の範囲のパフォーマンスが見られました。
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 にバグはありますか?