0

理论上,考虑到两个查询都返回相同的结果集,为什么内连接比左外连接工作得快得多。我有一个需要很长时间才能描述的查询,但这就是我看到的更改单连接:左外连接 - 6 秒,内连接 - 0 秒(查询的其余部分相同)。结果集:相同

4

2 回答 2

1

实际上取决于数据,左外连接和内连接不会返回相同的结果..左外连接很可能会产生更多结果,并且再次取决于数据..

于 2012-04-16T14:36:39.563 回答
0

如果我将左连接更改为内部连接并且结果没有什么不同,我会担心。我怀疑您在 where 子句中的表左侧有一个条件,有效地(并且可能不正确地)将其转换为内部连接。

就像是:

select * 
from table1 t1
left join table2 t2 on t1.myid = t2.myid
where t2.somefield = 'something'

这不是一回事

select * 
from table1 t1
left join table2 t2 
on t1.myid = t2.myid and t2.somefield = 'something'

所以首先我会担心我的查询一开始就不正确,然后我会担心性能。内连接不是左连接的性能增强,它们意味着两个不同的东西,应该返回不同的结果,除非你有一个表,每条记录总是匹配。在这种情况下,您更改为内部联接,因为另一个不正确,无法提高性能。

关于左连接需要更长的时间的原因,我最好的猜测是它连接到更多的行,然后被 where 子句过滤掉。但这只是一个疯狂的猜测。要知道您需要查看执行计划。

于 2012-04-16T15:05:09.653 回答