什么是伪合并连接?

DVT*_*DVT 6 t-sql sql-server sql-execution-plan

这是Microsoft TechNet对Trace Flag 342的解释(重点已添加):

禁用伪合并连接的成本计算,从而显着减少了对某些类型的大型多表连接的解析所花费的时间.也可以使用SET FORCEPLAN ON来禁用伪合并连接的成本计算,因为查询被强制使用FROM子句中指定的顺序.

你们有谁知道什么是伪合并连接?据我所知,SQL Server有3个连接算法(嵌套循环连接,合并连接和散列连接 - 包含位图连接).那么什么是伪合并连接,它与常规合并连接或任何其他连接之间的区别是什么?

Pim*_*nta 1

我知道这是一个老问题,但我会尽力尽可能具体地回答它。

伪合并不是一种用作T-SQL语言运算符的Join,我对微软关于使用Trace Flag 342的解释的解释如下:

禁用伪合并连接的成本计算,从而显着减少解析某些类型的大型多表连接所花费的时间。

伪合并这个概念表示查询优化器正在尝试计算更好的查询执行计划,试图获得连接多个表的最佳方式。

还可以使用 SET FORCEPLAN ON 禁用伪合并联接的成本计算,因为查询被迫使用 FROM 子句中指定的顺序。

此选项可防止优化器尝试计算并简单地执行查询中列出的连接。

一篇关于SET FORCEPLAN ON的文章可供参考。