catch-img

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

 今回のOracle SQLチューニングは、「 画面PAGINATION処理する時これは守ろう 」の第4回目です。
「 PLANに現れるオペレーション中、COUNTに騙されないでおこう 」と題してお送りします。

それでは早速はじめましょう。

13.3 PLANに現れるオペレーション中、COUNTに騙されないでおこう

 部分範囲処理がされるように誘導するページ処理は、適切なROWNUM処理とOrder By節、Where節、インデックス構成情報が適切であり、テーブル間結合方式がNested Loops Joinで実行されるのであれば効率的な実行が可能です。

 “ 13.1 ROWNUM処理をよくしよう ” で説明した 部分範囲処理が不可能な例 の場合と共に適切でないROWNUM処理をしてもWhere節、インデックス構成情報とOrder By節の整列基準が合えば、SORT ORDER BYオペレーションが現れずに、COUNTオペレーションが見えてきます。 COUNTオペレーションがあたかも全体データ処理をせずに実行されているように見えますが実際には、全体データを全部処理した後に ROWNUM を実行することになるので注意しなければなりません。

以下の事例を通じて確認してみましょう。

 上記トレース結果を見ればROWNUM条件で範囲を問い合わせて非効率的に処理されています。
しかし、Where節のインデックス構成情報とOrder By節が適切に構成されている SORT ORDER BYオペレーションではないCOUNTオペレーションがあるのを確認することができます。

 この時、COUNTはCOUNT STOPKEYとは違うように全体データを全部処理するので非効率的に実行されます。
 これを効率的なページ処理で実行されるようにするためには、先立って“ ROWNUM処理をよくしよう ” で説明したようにRNUMを置き換える前に:B3値に該当するデータだけを持ってくるようにROWNUMに条件を追加する必要があります。




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



CONTACT

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

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

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

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

平日 10時~18時

人気記事ランキング

タグ一覧