执行情况的描述: 单个代码块运行较快,约10秒内,但两个代码 通过 union all 连接后,运行时间大约15分钟。
解决方案:Oracle 的 PL\SQL 的 F5 进入 执行计划界面,查看程序运行的时间以及提高执行速度的代码修改方法。
本质是:前面的代码块有重复调入表,全局搜索过多。
1、表连接时,把有索引的表作为主表进行连接,
2、表连接时,连接条件为多个时,可把多个条件通过'||'连接成一个联合条件进行连接,
3、表连接时,减少限制条件使用 in,not
4、表连接时,在where 减少 不同表的限制条件
由于工作需要,对原来的代码进行简写
with t1 as (
select
from t join s on t.a = s.a and t.b = s.b
where t.c in ('')
and s.限制条件
group by
),
t2 as (
select
from t join s on t.a = s.a and t.b = s.b
where t.c in ('')
and s.限制条件
group by
),
t3 as (
select
from t join s on t.a = s.a and t.b = s.b
where t.c in ('')
and s.限制条件
group by
)
select XX
from t1 left join t3 on 条件
union all
select XX
from t1 left join t2 on 条件;
修改后
with t1 as (
select
from s(有索引的表) join (select a ,b from t where t.c = '' ) t on t.a|| t.b = s.a|| s.b
where t.限制条件
group by
),
t2 as (
select
from s(有索引的表) join (select a ,b from t where t.c = '' ) t on t.a|| t.b = s.a|| s.b
where t.限制条件
group by
),
t3 as (
select
from s(有索引的表) join (select a ,b from t where t.c = '' ) t on t.a|| t.b = s.a|| s.b
where t.限制条件
group by
)
select XX
from t1 left join t3 on 条件
union all
select XX
from t1 left join t2 on 条件;