我有一个程序可以在一个按日期、对象名称和代码组织的非常大的表中找到一系列交易的第一个、最后一个、最高和最低价格。我还需要交易数量的总和。表中有大约 30 亿行,这个过程需要很多天才能运行。我想尽可能地缩短那段时间。我在 trans 表中的不同字段上有一个索引,并查看查询选择部分的解释计划,正在使用该索引。我愿意接受有关替代方法的建议。我使用 Oracle 11g R2。谢谢你。
declare
cursor c_iter is select distinct dt, obj, cd from trans;
r_iter c_iter%ROWTYPE;
v_fir number(15,8);
v_las number(15,8);
v_max number(15,8);
v_min number(15,8);
v_tot number;
begin
open c_iter;
loop
fetch c_iter into r_iter;
exit when c_iter%NOTFOUND;
select max(fir), max(las) into v_fir, v_las
from
( select
first_value(prc) over (order by seq) as "FIR",
first_value(prc) over (order by seq desc) as "LAS"
from trans
where dt = r_iter.DT and obj = r_iter.OBJ and cd = r_iter.CD );
select max(prc), min(prc), sum(qty) into v_max, v_min, v_tot
from trans
where dt = r_iter.DT and obj = r_iter.OBJ and cd = r_iter.CD;
insert into stats (obj, dt, cd, fir, las, max, min, tot )
values (r_iter.OBJ, r_iter.DT, r_iter.CD, v_fir, v_las, v_max, v_min, v_tot);
commit;
end loop;
close c_iter;
end;