admin

SQL Server:完全外连接的顺序重要吗?

sql

我的查询中有 4 个全外连接,而且速度非常慢,那么顺序对FULL OUTER JOIN性能/结果有影响吗?

全外连接 = ⋈

然后,

我有一个情况:A ⋈ B ⋈ C ⋈ D

所有连接都发生k在所有 A、B、C、D 中包含的所有键上

然后:

改变 ⋈ 连接的顺序会影响性能吗?
改变⋈的顺序会改变结果吗?
我觉得它应该不会影响结果,但会不会影响性能我不确定!

更新:

假设结果集与顺序无关,SQL Server 会自动重新排列连接以获得更好的性能吗?


阅读 255

收藏
2021-07-01

共1个答案

admin

不,重新排列 JOIN 订单不应影响性能。MSSQL(与其他 DBMS 一样)有一个查询优化器,它的工作是为任何给定的查询找到最有效的查询计划。一般来说,这些都做得很好 - 所以你不太可能轻易击败优化器。

也就是说,他们偶尔会弄错。这就是阅读执行计划发挥作用的地方。您可以添加联接提示来告诉MSSQL如何加入你的表(此时,订货做事情)。您通常会从最小到最大的表进行排序(尽管使用 aFULL JOIN可能不太重要)并遵循连接类型的经验法则。

由于您正在执行FULL JOINS,您基本上是从磁盘读取整个 4 个表。那很可能会非常昂贵。您可能需要重新检查问题,看看是否可以用不同的方式来完成。

2021-07-01