是否有“左连接”和“在哪里”或“在”中的匹配?

时间:2017-02-13 08:51:55

标签: sql

两个不同的SQL代码之间是否存在以下性能差异?第一个没有left jon并且与where匹配,另一个是left join并且与on匹配。

因为我从那些sql获得完全相同的结果/输出,但我将很快使用更大的表(比如数十亿行),所以我不希望出现任何性能问题。提前谢谢......

select a.customer_id
from table a, table b 
where a.customer_id = b.customer_id


select a.customer_id
from table a 
left join table b 
on a.customer_id = b.customer_id

1 个答案:

答案 0 :(得分:2)

两者做了不同的事情,是的,会对性能产生影响。

您的第一个示例是cross join,其中包含一个过滤器,可将其缩小为inner join(几乎所有规划人员都足够聪明,可以将其缩减为inner join但语义上为{{{} 1}}和过滤器。

你的第二个是cross join,这意味着如果不符合过滤器,你仍然可以从表a获得所有记录。

这意味着规划人员必须假设表a中的所有记录都是相关的,并且表b中的相关记录与第二个示例相关,但在第一个示例中,它知道只有相关记录是相关的(因此具有相关性)更加自由的规划)。

在非常小的数据集中,您将看到没有区别,但您可能会得到不同的结果。在大型数据集中,left join的效果永远不会超过您的left join,并且可能会表现更差。