有人能帮助我了解TSQL合并实际上是如何工作的吗?并帮助我了解何时更新/插入会更快,何时合并会更快?
我知道这是一个非常模糊的问题,与我正在研究的一个特定案例无关。希望这是允许的StackOverflow
如果你能给我相关的链接,将工作以及。谢谢。
谢谢你告诉我:SQL Server:合并性能,但我觉得这更多的是与索引相关,而不是合并,因此我的问题不是重复这个
合并实现在源和目标上执行full outer join
。根据您指定的副作用子句,可以将其简化为更容易的连接,例如左连接或内连接。
从连接结果中有计算标量运算符,计算应该发生什么操作以及将要使用什么值。该结果将被流式传输到执行写操作的操作符中。
这是非常简化的。如果只指定一个副作用子句,则与普通DML的差异几乎为零。这表明合并没有固有的性能劣势。
实际上它有一个优势,它只需要传递一次数据。通常,合并比多个语句做同样的事情要快。
- 优化器可以一次看到所有的DML
- 一次传递数据而不是一次传递语句
- 所有的索引写都是按索引键排序的。最好这样做一次而不是多次
- 单语句开销仅一次
如果你用一种不从以上任何一点获益的方式使用归并,它可以使用更多的CPU。
性能实际上取决于模式、合并的形状和数据。