显式JOINs与隐式连接?

Lin*_*815 5 database oracle performance join

我的数据库教授告诉我们使用:

SELECT A.a1, B.b1 FROM A, B WHERE A.a2 = B.b2;
Run Code Online (Sandbox Code Playgroud)

而不是:

SELECT A.a1, B.b1 FROM A INNER JOIN B ON A.a2 = B.b2;
Run Code Online (Sandbox Code Playgroud)

据推测,Oracle不喜欢JOIN-Syntaxes,因为这些JOIN语法比笛卡尔积的WHERE限制更难优化.

我无法想象为什么会出现这种情况.唯一的性能问题可能是解析器需要更多地解析几个字符.但在我眼里,这一点可以忽略不计.

我发现了这个Stack Overflow问题:

这篇文章在Oracle文档中:https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries006.htm

Oracle建议您使用FROM子句OUTER JOIN语法而不是Oracle join运算符.

有人可以通过链接向我提供Oracle的最新建议.因为她不承认StackOverflow(这里可以回答所有人),10g文档在这里是过时的.

如果我错了,Oracle真的不喜欢JOINS现在比那还好,但是我找不到文章.我只是想知道谁是对的.

非常感谢能帮助我的每个人!

Tim*_*sen 10

你的教授应该和哥伦比亚大学计算机科学教授戈登林诺夫谈谈.Gordon和本网站上的大多数SQL爱好者几乎总是会告诉你使用显式连接语法.原因很多,包括(但不限于):

  • 显式连接使得查看实际连接逻辑变得容易.另一方面,隐式连接通过将连接逻辑分散到两个FROMWHERE子句中来混淆连接逻辑.
  • ANSI 92标准建议使用现代显式连接,实际上已经弃用了教授似乎推动的隐式连接

关于性能,据我所知,您编写的查询的两个版本都将针对相同的内容进行优化.你总是可以检查两者的执行计划,但我怀疑你会经常看到一个显着的差异.

  • "ANSI 92标准......弃用了隐式连接"如果你是一名典型的大学生,那么在你出生之前这个弃用是* (2认同)