Hitachi

ノンストップデータベース HiRDB Version 9 パフォーマンスガイド


3.4.3 CROSS JOINの対策

〈この項の構成〉

(1) CROSS JOINとは

CROSS JOIN(直積)は,結合する表ごとに探索条件を満たす行を作業表に取り出します。そして,すべての行をそれぞれに組み合わせて結合します。このため,処理効率が悪いです。

図3‒16 CROSS JOINの処理方式

[図データ]

(2) 確認方法

CROSS JOINの確認方法を次に示します。

(3) 対策方法

SQL文に結合条件が指定されていないため,CROSS JOINになっています。結合条件とは,結合する表間の関係を示す条件のことです。SQL文の探索条件に,結合処理に使用できる結合条件を追加してください。そして,効率の良い結合方法に変更してください。

[図データ][効率の良い結合方法について]

SQL文のヒット件数が少ない場合はNESTED LOOPS JOIN,SQL文のヒット件数が多い場合はHASH JOINに変更してください。それぞれの結合方法への変更方法は,「MERGE JOINの対策」の「対策方法」を参照してください。

[図データ][こんなときは]

結合する表間の関係を示す条件を指定していても,SQL文によっては,結合処理に使用できない場合があります。使用できない例について,次に示します。

  • 結合する列が,両方ともどちらか片方の辺に指定されている場合

[例題]
SELECT * FROM T1 INNER JOIN BY NEST T2 ON T1.C1+T2.C1=10 WHERE T1.C2=? AND T2.C2=?

結合する列が両方とも結合条件の左辺に指定されています。

[対策方法]

左辺と右辺に分けて指定してください。

SELECT * FROM T1 INNER JOIN BY NEST T2 ON T2.C1=10-T1.C1 WHERE T1.C2=? AND T2.C2=?

対策前後のアクセスパスについて,次に示します。

図3‒19 HiRDB SQL Tuning Advisorの出力例

[図データ]

図3‒20  UAP統計レポートの出力例

[図データ]