两个不同的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
答案 0 :(得分:2)
两者做了不同的事情,是的,会对性能产生影响。
您的第一个示例是cross join
,其中包含一个过滤器,可将其缩小为inner join
(几乎所有规划人员都足够聪明,可以将其缩减为inner join
但语义上为{{{} 1}}和过滤器。
你的第二个是cross join
,这意味着如果不符合过滤器,你仍然可以从表a获得所有记录。
这意味着规划人员必须假设表a中的所有记录都是相关的,并且表b中的相关记录与第二个示例相关,但在第一个示例中,它知道只有相关记录是相关的(因此具有相关性)更加自由的规划)。
在非常小的数据集中,您将看到没有区别,但您可能会得到不同的结果。在大型数据集中,left join
的效果永远不会超过您的left join
,并且可能会表现更差。