3.4.3 CROSS JOINの対策
- 〈この項の構成〉
(1) CROSS JOINとは
CROSS JOIN(直積)は,結合する表ごとに探索条件を満たす行を作業表に取り出します。そして,すべての行をそれぞれに組み合わせて結合します。このため,処理効率が悪いです。
(2) 確認方法
CROSS JOINの確認方法を次に示します。
-
HiRDB SQL Tuning Advisorの場合
アクセスパス情報の「結合方法」に「CROSS JOIN」と表示されます。
CROSS JOINの出力例を次に示します。
図3‒17 HiRDB SQL Tuning Advisorの出力例(CROSS JOIN) -
UAP統計レポートの場合
アクセスパス情報の「Join Type」に「CROSS JOIN」と表示されます。
CROSS JOINの出力例を次に示します。
図3‒18 UAP統計レポートの出力例(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統計レポートの出力例 -