select a.dwh, b.dwbm, b.qc, b.jc, c.qxm, c.dm, a.bxh, a.gh, a.xm, a.sfzh
from qxb c, dwb b, grb a where b.dwbm = '215940301' and a.txh = '1' and a.zt in ('2', '3') and a.dwh = b.dwh and a.qx (+)= c.xzm;select a.dwh, b.dwbm, b.qc, b.jc, c.qxm, c.dm, a.bxh, a.gh, a.xm, a.sfzh
from (grb a inner join dwb b on a.dwh = b.dwh) left join qxb c on a.qx = c.xzm where b.dwbm = '215940301' and a.txh = '1' and a.zt in ('2', '3');上面的语句执行需850多秒
下面的语句执行需60秒左右为什么相同功能的两条语句执行效率要差那么多?
请大家一起分析一下。
from qxb c, dwb b, grb a where b.dwbm = '215940301' and a.txh = '1' and a.zt in ('2', '3') and a.dwh = b.dwh and a.qx (+)= c.xzm;select a.dwh, b.dwbm, b.qc, b.jc, c.qxm, c.dm, a.bxh, a.gh, a.xm, a.sfzh
from (grb a inner join dwb b on a.dwh = b.dwh) left join qxb c on a.qx = c.xzm where b.dwbm = '215940301' and a.txh = '1' and a.zt in ('2', '3');上面的语句执行需850多秒
下面的语句执行需60秒左右为什么相同功能的两条语句执行效率要差那么多?
请大家一起分析一下。
两个都是表达的意思都是一样的,只是9i以后的版本做了一些优化
第二个语句是 A与B内连接的结果和C表做外连接,A与B先做一次内连接过滤掉大部分数据,小部分数据在和B表做外连接当然快一点了
第一个语句如果先执行 a.qx (+)= c.xzm; 那就跟没过滤到什么数据,这样就做了两次大不表关联
先用子查询过滤大部分数据,再连接就快多了。
但如果建立了索引就大不一样了,因为Select子查询后的结果集是没有索引的,而索引的作用就是类似数据结构中的快表查询,对大数据量操作的改善是非常有用的!