编辑9-3-10:我最近发现这篇博客文章很有启发性。http://optimizermagic.blogspot.com/2007/12/outerjoins-in-oracle.html
有时候,一种或另一种联接语法实际上执行得更好。我还发现,当选择Oracle join语法而不是ANSI语法时,会发现性能略有提高(仅在VLDB中很明显)。也许这还不足以让人过于挑剔,但对于那些认真掌握Oracle DB的人来说,回顾一下这篇文章可能会有所帮助。
我知道Oracle有两个外部联接语法:
select a, b
from table1
left outer join table2
on table2.foo = table1.foo或
select a, b
from table1, table2
where table2.foo(+) = table1.foo(假设我正确地掌握了第二个示例的语法。)
这两者之间有性能上的差别吗?起初,我认为这一定是开发人员的一种风格偏好,但后来我读到了一些东西,让我觉得也许有理由使用一种风格而不是另一种风格。
发布于 2009-08-20 22:37:35
“也许有理由使用一种风格而不是另一种风格。
原因是有的,但与性能无关的原因。ANSI风格的外部连接,以及标准的,提供了完整的外部连接和外部连接到多个表。
发布于 2009-08-20 21:41:33
Oracle在版本9i之前不支持ANSI语法。
由于该版本,这些查询执行相同的操作,并产生相同的计划。
正确的预9i语法如下:
SELECT a, b
FROM table1, table2
WHERE table2.foo(+) = table1.foo发布于 2009-08-20 20:18:47
没有表现上的差别。您还可以检查两个查询的执行计划以进行比较。
https://stackoverflow.com/questions/1308543
复制相似问题