我的查询中有 4 个全外连接,而且速度非常慢,那么顺序对FULL OUTER JOIN性能/结果有影响吗?
全外连接 = ⋈
然后,
我有一个情况:A ⋈ B ⋈ C ⋈ D
所有连接都发生k在所有 A、B、C、D 中包含的所有键上
然后:
改变 ⋈ 连接的顺序会影响性能吗? 改变⋈的顺序会改变结果吗? 我觉得它应该不会影响结果,但会不会影响性能我不确定!
更新:
假设结果集与顺序无关,SQL Server 会自动重新排列连接以获得更好的性能吗?
不,重新排列 JOIN 订单不应影响性能。MSSQL(与其他 DBMS 一样)有一个查询优化器,它的工作是为任何给定的查询找到最有效的查询计划。一般来说,这些都做得很好 - 所以你不太可能轻易击败优化器。
也就是说,他们偶尔会弄错。这就是阅读执行计划发挥作用的地方。您可以添加联接提示来告诉MSSQL如何加入你的表(此时,订货做事情)。您通常会从最小到最大的表进行排序(尽管使用 aFULL JOIN可能不太重要)并遵循连接类型的经验法则。
由于您正在执行FULL JOINS,您基本上是从磁盘读取整个 4 个表。那很可能会非常昂贵。您可能需要重新检查问题,看看是否可以用不同的方式来完成。