提高SQL Server中MERGE语句的性能

时间:2013-07-11 12:04:14

标签: sql tsql sql-server-2008-r2

我有一个过程来计算SQL Server 2008 R2中的一个大表中的每日销售预测(让我们称之为Mothership)。每天,我在事务数据库上扫描CDC以提取更改,计算增量预测,并将此DeltaMothership合并。问题是,性能非常不一致。 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中有关于性能的错误吗?

1 个答案:

答案 0 :(得分:1)

MERGE声明周围发现了一些错误。 Dan Guzman已经确定了MERGE受到竞争条件影响的一些情况,详情请参见此处 http://weblogs.sqlteam.com/dang/archive/2009/01/31/UPSERT-Race-Condition-With-MERGE.aspx

和Aaron Bertrand在这里的帖子中列出了一系列问题 http://www.sqlperformance.com/2013/02/t-sql-queries/another-merge-bug