catch-img

Oracle SQLチューニング(第52回)「画面PAGINATION処理する時これは守ろう」(6/7回)

 今回のSQLチューニングは、「 画面PAGINATION処理する時これは守ろう 」の第6回目です。

 「 NESTED LOOPS JOINに非効率が多くない場合、ページ処理が効果的である 」をお送りします。
 それでは早速はじめていきましょう。

 13.5 NESTED LOOPS JOINに非効率が多くない場合、ページ処理が効果的である

 効果的なページ処理が行われるためには、Driving Tableで抽出されたデータ件数と最終的に抽出されたデータ件数の差が大きくなってしまうのは、望ましくはありません。 

 例えば、[A→B→C?→D]4個のテーブルを結合後、その結果を抽出するSQLがあるとします。
そしてこのSQLは、まずAのテーブルで1,000,000件を抽出した後、Bテーブルとの結合処理を行った結果、データ件数が1,000件に減少した。

 次に、Bテーブルで抽出された1,000件に、更に[C,Dテーブル]を結合処理を実行し、最終的に1,000件のデータが抽出されたとします。
 上記のようなSQLにページ処理を適用すると、1ページに表示する必要があるデータ件数と比較した場合、多くのI/O処理量が発生することになります。そのため、効率的な部分範囲処理が行われないことがあります。
 その理由は、1ページに表示する必要のあるデータは、SQLのROWNUM条件をクリアしなければなりません。

 しかし、Driving Tableで抽出された1,000,000件のうち、Bのデータに,更にC,Dテーブルとの結合に成功したデータは、1,000件であるので、ROWNUM条件をクリアするデータを抽出するには、多くのデータ処理が必要となるからです。

 従って、Driving Tableで抽出されたデータの結合処理を実行しても、結果としてデータ件数が減らない場合には、ページ処理を行った方が効率的であると言えます。



次回のブログは「 画面PAGINATION処理する時これは守ろう 」の最終回です。
それでは See you next time!!

CONTACT

他社に頼らず自社でデータベースを監視・運用をしませんか?
MaxGaugeがサポートします

お役立ち資料は
こちらから

不明点がある方は、
こちらからお問い合わせください

お電話でのお問い合わせはこちら

平日 10時~18時

人気記事ランキング

タグ一覧