鉴于以下情况:
表A有1000行,表B有5000行。
Q1:从Table_A左外连接Table_B中选择* ON 条件
Q2:从Table_B左外连接Table_A中选择* ON 条件
这有什么不同吗?在这些情况下会有任何性能差异吗?
答案 0 :(得分:3)
是的,它会为LEFT JOIN
产生大差异。这两个语句不一样,执行路径可能不同。
第一个查询保留表A中的所有行,以及表B中的任何匹配值。因此,此版本至少返回1000行。
第二个保留表B中的所有行,加上表A中的任何匹配值。这不是一回事。此版本至少返回5000行。
对于INNER JOIN
(或FULL OUTER JOIN
),FROM
子句中表的顺序不会影响结果集。但是,取决于优化器,它可能会影响联接的处理方式(我正在考虑优化器采用快捷方式的长连接链)。
答案 1 :(得分:0)
这会有什么不同吗?
是的。 LEFT JOIN
定义:返回左表中的所有行+两个表中的匹配行。匹配行意味着两个表的交集。
因此,在您的情况下,返回的行数将非常不同。
Q1: Select * from Table_A Left Outer Join Table_B ON condition
在这种情况下,返回的行数将是1000
(因为tableA
有1000行,在JOIN
左侧)加上匹配(表之间的交集)
Q2: Select * from Table_B Left Outer Join Table_A ON condition
在这种情况下,返回的行数将是5000
(因为tableB
有5000行,而JOIN
左侧)加上匹配(表之间的交集)
查看相同[从This CodeProject Post获取的图像]的视觉表示:
答案 2 :(得分:-1)