Sql 改变联接条件中表的顺序
鉴于以下情况: 表A有1000行,表B有5000行 Q1:从表A左外部联接表B中选择* 条件 Q2:从表_B左侧外部联接表_A中选择* 条件 这有什么区别吗?在这些情况下会有任何性能差异吗?是的,对于Sql 改变联接条件中表的顺序,sql,join,Sql,Join,鉴于以下情况: 表A有1000行,表B有5000行 Q1:从表A左外部联接表B中选择* 条件 Q2:从表_B左侧外部联接表_A中选择* 条件 这有什么区别吗?在这些情况下会有任何性能差异吗?是的,对于左连接来说会有很大的差异。这两条语句不同,执行路径也可能不同 Q1: Select * from Table_A Left Outer Join Table_B ON condition 第一个查询保留表A中的所有行,以及表B中的任何匹配值。因此,此版本至少返回1000行 第二个保留表B中的所有行
左连接来说会有很大的差异。这两条语句不同,执行路径也可能不同
Q1: Select * from Table_A Left Outer Join Table_B ON condition
第一个查询保留表A中的所有行,以及表B中的任何匹配值。因此,此版本至少返回1000行
第二个保留表B中的所有行,以及表A中的任何匹配值。这不是一回事。此版本至少返回5000行
对于内部联接
(或完全外部联接
),则FROM
子句中表的顺序不会影响结果集。但是,根据优化器的不同,它可能会影响联接的处理方式(我认为是优化器走捷径的长联接链)。这两个查询将产生不同的结果
看
然后转到“自己尝试”页面。可以为左外部联接编辑SQL
这有什么区别吗
是的<代码>左联接
定义:返回左表中的所有行+两个表中匹配的行。匹配行表示两个表的交集
因此,在您的情况下,返回的行数将非常不同
Q1: Select * from Table_A Left Outer Join Table_B ON condition
在这种情况下,返回的行数将是1000
(因为table a
有1000行,并且在JOIN
的左侧)加上匹配项(表之间的交集)
在这种情况下,返回的行数将是5000
(因为table b
有5000行,并且在JOIN
的左侧)加上匹配项(表之间的交集)
查看相同[图像取自]的视觉表示:
您正在使用哪个数据库?MS Access?嗨,John,我问的是任何数据库。性能是DBMS特有的,因此我们无法回答这部分问题,除非您告诉我们是哪一部分。谢谢您的回复John..谢谢您的解释。但是这里会有很大的性能差异吗。。?左侧行数较少的表获取速度更快??请不要引用W3学校。他们因信息不准确而臭名昭著。看,我把他引导到了“自己尝试”页面,这将允许OP自己尝试并看到差异。这就是我的意图。谢谢:)但是这里会有很大的性能差异吗。。?左侧行数较少的表获取速度更快??