(在oracle中)在性能上有区别吗
Select * from Table1 T1
Inner Join Table2 T2 On T1.ID = T2.ID
And
Select * from Table1 T1, Table2 T2
Where T1.ID = T2.ID
?
(在oracle中)在性能上有区别吗
Select * from Table1 T1
Inner Join Table2 T2 On T1.ID = T2.ID
And
Select * from Table1 T1, Table2 T2
Where T1.ID = T2.ID
?
当前回答
的确,在功能上,这两个查询应该以相同的方式处理。但是,经验表明,如果您正在从使用新连接语法的视图中进行选择,那么使用该语法组织查询也很重要。如果视图使用了“join”语句,Oracle的优化器可能会感到困惑,但是访问视图的查询使用了传统的“where”子句连接方法。
其他回答
从功能上讲,它们是相同的。不过,我同意使用连接更好地描述您想要做的事情。很多时候,我认为我知道我想如何查询一些东西,直到我开始做连接,并意识到我想做一个不同于我头脑中的原始查询。
它们都是做同样事情的内部连接,一个只是使用更新的ANSI语法。
除了这个好答案,我还有一个补充:
这就是分别定义为SQL92和SQL89的内容,它们之间没有性能差异,尽管可以省略INNER这个词(只使用JOIN就足够清楚了,在最简单的查询中保存了5个键盘笔画,现在想象一下在大的查询中有多少笔画)。
性能应该是相同的,但我建议使用连接版本,因为在涉及到外部连接时提高了清晰度。
另外,使用连接版也可以避免无意的笛卡尔积。
第三个效果是使用更简单的where条件更容易读取SQL。
就像kiewik说的,执行计划是一样的。
JOIN语句只是更容易阅读,使它更容易不忘记ON条件和得到笛卡尔积。在使用多个连接类型的长查询中,这些错误很难检测到:SELECT * FROM t1, t2 WHERE t1.id=t2.some_field。
如果你只忘记了一个连接条件,你会得到一个很长的执行查询,返回太多的记录…真的太多了。有些人使用DISTINCT来修补查询,但执行起来仍然很长。
这就是为什么使用JOIN语句肯定是最佳实践:具有更好的可维护性和更好的可读性。
此外,如果我没记错的话,JOIN在内存使用方面进行了优化。