-1
テーブルには50,000,000行が含まれていますが、以下は実行している選択クエリですが、膨大な時間がかかります。このクエリを調整できますか?複数のGROUP BY句を使用したクエリのチューニング
select phone_number,rg,val from (
select phone_number, rg, sum(val) val from
(select /*+ PARALLEL(GPRS_CDR 3) */ phone_number, rg1 rg, sum(rg1_vol) val
from gprs_cdr
where day_of_year=to_char(sysdate -1,'ddd')
group by phone_number, rg1
union all
select /*+ PARALLEL(GPRS_CDR 3) */ phone_number, rg2 rg, sum(rg2_vol) val
from gprs_cdr
where day_of_year=to_char(sysdate -1,'ddd')
group by phone_number, rg2
union all
select /*+ PARALLEL(GPRS_CDR 3) */ phone_number, rg3 rg, sum(rg3_vol) val
from gprs_cdr
where day_of_year=to_char(sysdate -1,'ddd')
group by phone_number, rg3
union all
select /*+ PARALLEL(GPRS_CDR 3) */ phone_number, rg4 rg, sum(rg4_vol) val
from gprs_cdr
where day_of_year=to_char(sysdate -1,'ddd')
group by phone_number, rg4
union all
select /*+ PARALLEL(GPRS_CDR 3) */ phone_number, rg5 rg, sum(rg5_vol) val
from gprs_cdr
where day_of_year=to_char(sysdate -1,'ddd')
group by phone_number, rg5)
where rg = '31'
group by phone_number,rg
order by val desc
)
where rownum <= 20;
いいえアイロニー・スタック –
テーブル構造とサンプル・データを表示します。 'RG2_VOL'、' RG3_VOL'などに含まれる値が他のレコードにあるかどうかを確認する必要があります。 –