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