2023.07.26
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で抽出されたデータの結合処理を実行しても、結果としてデータ件数が減らない場合には、
ページ処理を行った方が効率的であると言えます。
SQLチューニングブログ(第52回) 終