Oracle查询优化 - 2个查询的执行时间差异

时间:2017-11-01 17:50:36

标签: oracle query-optimization query-performance

我想知道是否有人清楚解释为什么Query A需要数小时才能完成,而Query B几乎是即时的。

注意:Table1有一个VarA索引。

查询A:

select count(*) 
  from Table1 
 where VarA in (select A from Table2)
   and VarB in (select B from Table3);

查询B:

Create table tmp1 as select * from Table1 where VarA in (select A from Table2);

select count(*) 
  from tmp1
 where VarA in (select A from Table2)
   and VarB in (select B from Table3);

我在这里所做的就是创建一个临时表,它是Table1的一个子集,包含所有匹配VarA&的记录。然后针对Query A运行temp table

有人可以解释为什么Oracle不会进行类似的优化并以类似的方式处理数据,导致Query A的执行时间与Query B相同吗?

注意: Query B同时指的是create table语句和select语句。两个语句的组合执行时间几乎是即时的,而Query A非常慢(需要几个小时才能执行)

0 个答案:

没有答案