お世話になります。
2つのテーブルを結合したSQLを作成しています。
実行すると40分ぐらいかかっているものを改善したいので
お知恵を拝借させてください。
バージョンは11gです。
・マスタテーブル<tt>
KEY1_FROM
KEY1_TO
KEY2_FROM
KEY2_TO
FLG1
FLG2
…
(PRIMARY KEY KEY1_FROM,KEY1_TO,KEY2_FROM,KEY2_TO)
(INDEX NON UNIQUE INDEX I1 KEY1_FROM,KEY1_TO,KEY2_FROM,KEY2_TO)
798件</tt>
・トランザクションテーブル<tt>
XXXCODE
XXXDATE
XXXCHANNEL
XXXMONTH
XXXKINGAKU
…
(PRIMARY KEY XXXCODE, XXXDATE)
(NONUNIQUE INDEX XXXCODE,XXXDATE,XXXMONTH,XXXKINGAKU)
約14000000件</tt>
改善したいSQLは↓です
SELECT
W.XXXDATE
,W.XXXCHANNEL
,COUNT(W.XXXCODE) AS "件数"
FROM トランザクションテーブル W
LEFT JOIN マスタテーブル B
ON W.XXXMONTH BETWEEN B.KEY1_FROM AND B.KEY1_TO
AND W.XXXKINGAKU BETWEEN B.KEY2_FROM AND B.KEY2_TO
GROUP BY W.XXXDATE, W.XXXCHANNEL
実行計画はこれです
-------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 34 | 952 | | 622K (84)| 02:04:29 |
| 1 | HASH GROUP BY | | 34 | 952 | | 622K (84)| 02:04:29 |
| 2 | MERGE JOIN OUTER | | 6489M| 169G| | 154K (36)| 00:30:52 |
| 3 | SORT JOIN | | 13M| 225M| 854M| 101K (1)| 00:20:14 |
| 4 | TABLE ACCESS FULL | トランザクションテーブル | 13M| 225M| | 24005 (1)| 00:04:49 |
| 5 | FILTER | | | | | | |
| 6 | SORT JOIN | | 798 | 8778 | | 4 (25)| 00:00:01 |
| 7 | INDEX FAST FULL SCAN| I1 | 798 | 8778 | | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------------------
よろしくお願いいたします。
Edited by: 993771 on 2013/03/13 21:57