分析関数を使用したSQL文が遅い
お世話になっております。
現在、以下のSQL文が、2時間以上かかっているため、
パフォーマンスチューニングを依頼されましたが、
どのようにして解決すれば良いのか分からないため、
こちらでご質問させて頂きます。
環境は、ORACLE10gRelease2です。
Line:-----
SELECT DISTINCT
B.COLUMN1,
B.COLUMN2,
A.COLUMN3,
A.COLUMN4,
A.COLUMN5,
A.COLUMN6,
A.COLUMN7,
A.COLUMN8,
A.COLUMN9,
A.COLUMN10,
A.COLUMN11,
A.COLUMN12,
F.COLUMN13,
F.COLUMN14,
G.COLUMN15
G.COLUMN16,
E.COLUMN17,
D.COLUMN18,
D.COLUMN19,
C.COLUMN20,
C.COLUMN21,
C.COLUMN22,
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, A.COLUMN6, A.COLUMN8, C.COLUMN20, C.COLUMN21),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, A.COLUMN6, C.COLUMN20, C.COLUMN21),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, A.COLUMN6, C.COLUMN20, C.COLUMN21, A.COLUMN10),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, F.COLUMN13, C.COLUMN20, C.COLUMN21),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, F.COLUMN13, C.COLUMN20, C.COLUMN21, A.COLUMN10),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, G.COLUMN15, C.COLUMN20, C.COLUMN21),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, G.COLUMN15, C.COLUMN20, C.COLUMN21, A.COLUMN10),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, D.COLUMN18, C.COLUMN20, C.COLUMN21),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, D.COLUMN18, C.COLUMN20, C.COLUMN21, A.COLUMN10),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, A.COLUMN6, F.COLUMN13, C.COLUMN20, C.COLUMN21),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, A.COLUMN6, F.COLUMN13, C.COLUMN20, C.COLUMN21, A.COLUMN10),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, A.COLUMN6, G.COLUMN15, C.COLUMN20, C.COLUMN21),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, A.COLUMN6, G.COLUMN15, C.COLUMN20, C.COLUMN21, A.COLUMN10),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, A.COLUMN6, D.COLUMN18, C.COLUMN20, C.COLUMN21),
COUNT(DISTINCT C.COLUMN23) OVER (PARTITION BY A.COLUMN4, A.COLUMN6, D.COLUMN18, C.COLUMN20, C.COLUMN21, A.COLUMN10)
FROM
TBL1 A
INNER JOIN
TBL2 B
ON
A.COLUMN3 = B.COLUMN3
INNER JOIN
TBL3 C
ON
A.COLUMN8 = C.COLUMN8
INNER JOIN
TBL4 D
ON
A.COLUMN8 = D.COLUMN8
LEFT OUTER JOIN
TBL5 E
ON
A.COLUMN3 = E.COLUMN3
AND D.COLUMN18 = E.COLUMN18
LEFT OUTER JOIN
TBL6 F
ON
A.COLUMN8 = F.COLUMN8
LEFT OUTER JOIN
TBL7 G
ON
A.COLUMN8 = G.COLUMN8
;
Line:-----
SELECT句のCOUNT~の数を0個にすると、約1分。
5個約1時間、10個約2時間、15個約3時間と、この数に比例して処理時間が増えて行きます。
色々とパフォーマンスチューニングのテクニック等あるかと思います。
上記SQL文を効率的に取得する方法を教えて頂けないでしょうか。
よろしくお願い致します。