是否存在内连接和外连接性能差异

时间:2014-08-04 21:15:40

标签: sql join

我读了一些现有代码,发现所有SQL都写为外连接,即使它是内连接。 然后,我开始考虑结果是否相同之间的性能差异。 在我看来,内连接应该比外连接更快。但是,我找不到任何证明这一点的文件。 你能帮帮我吗? 感谢

2 个答案:

答案 0 :(得分:0)

我不确定,但据此(www.w3schools.com/sql/sql_join_full.asp),FULL OUTER JOIN返回左表和右表中的所有行 内连接(www.w3schools.com/sql/sql_join_full.asp)只要匹配就选择两个表中的所有行。所以内联不仅如此 现在必须检查两个表。所以我认为内部联接需要更长时间来构建它 结果列表。但是,记忆是另一个问题。内连接最有可能返回较少的东西(取决于 关于标准是什么)而全外连接将返回两个表,这意味着更多的内存数据。

但是,与左外连接或右外连接相比,内连接可能需要更少的时间,因为 那些外连接也必须匹配。(http://www.techonthenet.com/sql/joins.php

答案 1 :(得分:-1)

这实际上是一个复杂的问题要回答。是的,当INNER JOINS被写为OUTER JOINS时,性能可能会有所不同。但是我会稍微阅读你的问题,并稍微改一下:

“为什么我看到人们将INNER JOIN写为OUTER JOINS?”

人们在创建视图时经常使用此技术。在视图中,您不一定知道视图的用户想要哪些表 - 他们可能想要少于所有列。如果用户想要所有列,他们实际上可能不想要整个表。考虑诸如星型模式之类的模式,其中许多“小”维度表引用单个“事实”表。举个例子,假设有一个名为Sales的表,它有一堆其他相关的表,如Date,Salesperson和Territory。您可以通过将所有表连接到事实表来创建一个“扁平化”的视图。

如果您使用INNER JOIN,每次有人使用该视图时,数据库服务器通常会生成一个查询视图中每个表的查询计划。因此,即使您编写了一个类似“SELECT TerritoryName,SUM(Sales)from vw_AllSales”的查询,基于INNER JOIN的视图仍会查询Date和Salesperson。在视图定义中使用OUTER JOIN通常会让优化器“优化”对视图使用者不关心的表的引用。