Skip to Main Content

Japanese

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

分析関数を使用したSQL文が遅い

user5799127Aug 25 2011
お世話になっております。

現在、以下の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文を効率的に取得する方法を教えて頂けないでしょうか。

よろしくお願い致します。
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Sep 22 2011
Added on Aug 25 2011
0 comments
2,781 views