使用SQL,每种类型的连接的效率排名是什么

时间:2011-02-16 21:28:50

标签: sql join performance ranking

JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN?

我猜测连接两侧数据集的大小可能会使LEFT与RIGHT成为一个难以调用的,但其他人如何比较。

我还假设JOIN& INNER JOIN是一回事吗?如果没有,这如何适合订单/排名。

3 个答案:

答案 0 :(得分:3)

是的,JOIN和INNER JOIN是一样的。一般来说,排名是JOIN最快,紧接着是LEFT JOIN,相当于RIGHT JOIN,然后在FULL JOIN的距离很远。

但是这个排名变化很大,可以在很大程度上被忽略。您的实际性能在很大程度上取决于数据集的大小,正确索引的可用性以及所选的确切查询计划。一个LEFT JOIN可能很快,下一个INNER JOIN可能会很慢。

尽管如此,除非你绝对需要,否则我会建议避免全加入。 (至少在Oracle中,这是我遇到过糟糕经历的地方。)

答案 1 :(得分:2)

当需要INNER时,

INNER JOIN是可选字词=>所以他们是同一个人。这与LEFT / RIGHT / FULL OUTER JOIN

中可选的单词OUTER相同

在效率方面,它完全取决于发生了什么。如果它是LEFT JOIN,右侧有一个IS NOT NULL测试(反半连接),那么它非常有效并且就像EXISTS子句一样。

缺席其他因素,仅考虑

SELECT .. FROM A X-JOIN B ON <condition>
  1. 如果需要从A,B或两者中保留结果,那么效率不是一个因素。您需要左/右/全连接,因为提供了正确的结果

  2. 如果您需要双方都匹配的结果,并且并非所有数据都可以从任何一方获得,那么与上述相同,则需要 INNER JOIN

    < / LI>
  3. 只有当绑定绑定在两侧找到行时,才能选择LEFT / RIGHT / FULL连接。在大多数情况下, INNER JOIN会更快,因为它为优化器提供了从较小的表(或更好的索引)开始和与较大的表匹配的选项。

  4. 在第3点中

    “在大多数情况下”,因为不同的RDBMS可能会以不同方式优化查询。

答案 2 :(得分:1)

对它们进行排名以提高效率将毫无意义,因为它们会返回不同的结果。如果您需要左连接,则内连接将无法完成此任务。

连接的效率与表的大小,索引以及查询的其余部分的编写方式相比,无论是INNER,OUTER,CROSS还是FUll JOIN。两个小表上的CROSS JOIN可能很快,但两个大表上的INNER连接与一个不可sargable的WHERE子句不会。