日付、オブジェクト名、およびコードで構成された非常に大きなテーブルで、一連のトランザクションの最初、最後、最大および最低価格を検索する手順があります。私はまた取引量の合計が必要です。テーブルには約30億行があり、この手順には実行に数日かかる。私はできるだけその時間を短縮したいと思います。私はトランステーブルの別個のフィールドにインデックスを持ち、クエリの選択された部分についての説明を見て、インデックスが使用されています。私は、代替的なアプローチに関する提案には開いています。私はOracle 11g R2を使用します。ありがとうございました。Oracle 11gの最適化手順
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;
これは非常にエレガントなソリューションですありがとうございます。私は現在のスクリプトと手続きの時間を合わせて報告します。 –
このSQLは3時間で実行され、3日間で実行されました。私は絶対に驚いています。助けてくれてありがとう。相談しますか? –
パラレルクエリはEnterprise Editionでのみライセンスされていることに注意してください。それは銀色の弾丸でもありません。 – APC