(在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

?


当前回答

今天,当我在生产环境中检查我们的一个sp的超时时,我遇到了这个难题,将一个从XML提要构建的表上的内部连接更改为“where”子句....现在执行1000次的平均执行时间是80ms,而以前的平均执行时间是2.2秒……执行计划的主要区别是取消了键查找…除非你用这两种方法测试过,否则你不会知道答案。

欢呼。

其他回答

不要忘记在Oracle中,如果连接键属性在两个表中命名相同,你也可以这样写:

select *
from Table1 inner join Table2 using (ID);

当然,这也有相同的查询计划。

如果查询优化器的工作是正确的,那么这些查询之间应该没有区别。它们只是指定相同期望结果的两种方法。

今天,当我在生产环境中检查我们的一个sp的超时时,我遇到了这个难题,将一个从XML提要构建的表上的内部连接更改为“where”子句....现在执行1000次的平均执行时间是80ms,而以前的平均执行时间是2.2秒……执行计划的主要区别是取消了键查找…除非你用这两种方法测试过,否则你不会知道答案。

欢呼。

[为了加分…]

使用JOIN语法允许您更容易地注释掉连接,因为它全部包含在一行中。如果要调试一个复杂的查询,这可能很有用

正如其他人所说,它们在功能上是相同的,但是JOIN更清楚地表达了意图。因此,它可能会在当前oracle版本的某些情况下帮助查询优化器(我不知道它是否有用),它可能会在oracle的未来版本中帮助查询优化器(没有人知道),或者如果你改变数据库供应商,它可能会有帮助。

的确,在功能上,这两个查询应该以相同的方式处理。但是,经验表明,如果您正在从使用新连接语法的视图中进行选择,那么使用该语法组织查询也很重要。如果视图使用了“join”语句,Oracle的优化器可能会感到困惑,但是访问视图的查询使用了传统的“where”子句连接方法。