TSQL Merge如何工作?针对UPDATE和INSERT的性能

时间:2015-08-21 06:46:07

标签: sql sql-server performance tsql sql-server-2012

有人可以帮我理解TSQL合并的实际效果吗?并帮助我了解UPDATE / INSERT何时更快以及何时MERGE更快?

我知道这是一个非常模糊的问题,与我正在处理的一个特定案例无关。希望StackOverflow允许这样做。

如果你能给我相关的链接也可以。感谢。

感谢您指点: SQL Server : MERGE performance但我觉得这与索引然后合并更相关,因此我的问题与此不重复。

1 个答案:

答案 0 :(得分:1)

合并实现在源和目标上执行full outer join。根据您指定的副作用子句,可以将其简化为更容易的连接,例如左连接或内连接。

从连接结果中有计算标量运算符,用于计算应该发生的操作以及将要使用的值。此结果将流式传输到执行写操作的运算符。

这非常简化。如果您只指定一个副作用子句,则与普通DML的差异几乎为零。这表明合并没有固有的性能劣势。

事实上,它只需要传递一次数据就具有优势。通常,合并比执行相同操作的多个语句更快。

  • 优化器可以立即查看所有DML
  • 对数据进行一次传递,而不是每次传递一次
  • 所有索引写入都按索引键排序。最好这样做一次而不是多次
  • 每个语句开销只有一次

如果您以不受任何这些点影响的方式使用合并,它可以使用更多的CPU。

性能实际上取决于架构,合并的形状和数据。我可以构建合并稍慢的情况和速度明显更快的情况。