2010-08-12 76 views
4

为什么外部连接总体上比内部连接慢?我的意思是,独立于数据库供应商。我想这是一个实施问题或使用的访问计划,但我无法说服我的一位同事认为性能应该是相同的。外部连接性能

在此先感谢 圣路易斯

回答

6

一个inner join将消除行,而outer join不会。这导致需要处理更多的行。

看看this article,它可以直观地描述连接。请注意,inner join与左侧和完整outer join的结果集相差多少。这些照片并不代表每种情况,但它们会让您知道发生了什么。

1

外连接通常会为您提供更多的结果(A*B而不是WHERE A=B)。这需要更多时间。

+1

外连接通常不会给您乘以B作为结果数,因为它不是联合。它会给你A或B中的记录数量作为结果,这取决于哪一个是这两者中的主要选择。外连接仅意味着当连接表中没有对应的记录时,您需要主选定表上的所有记录和连接表的列中的空值。只有在您可以执行“完整”外连接时才会发生A * B:将左外连接和右外连接组合在一起。 – 2010-08-12 14:22:16

+0

@Marjan,如果它是'FULL OUTER JOIN'呢? – 2010-08-12 14:24:45

+0

@Abe:我刚刚意识到这一点并编辑了我的评论......(无法删除它们......) – 2010-08-12 14:25:55

1

一般来说,这是因为数据库引擎必须执行更多的比较操作来缩小结果集。

1

用真实数据进行测试。 这可能是,除非外连接引入额外的行,性能是相同的。

2

我有性能问题,即时我的网站,发现查询用7秒钟完成

在此查询中的所有列均数和被索引(SQL Server 2008 R2中)

这全外加入的是3个表格,每个表格有150,350和270行。

我简单地更换了FULL OUTER JOIN为LEFT JOIN和执行时间减少为0秒(毫秒)

我只是用几行 然后测试之前,如果表有成千上万的记录,表现一个完整的外连接将不太好。

1

有些时候,连接执行速度比内部连接快。这将取决于应该加入的2个结果集