我想知道是否有人清楚解释为什么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
非常慢(需要几个小时才能执行)