catch-img

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

 今回のSQLチューニングは、「 画面PAGINATION処理する時これは守ろう 」の第3回目です。
 「 インデックス カラム順序とORDER BY節順序を合わせよう 」と題してお送りします。

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

13.2 インデックス カラム順序とORDER BY節順序を合わせよう

 オンライン画面で適用するページ処理を効率的に実行するためには、Where節で処理する条件、インデックスのカラム構成順序、Order By節順序が一致している必要があります。
 しかし、From句に色々なテーブルが存在する場合、必ず上の内容を持つテーブルから順番に実行します。

例えば、以下のようなSQLがあると仮定しましょう。

◆ 部分範囲処理が不可能な例

  • WHERE条件:A,Bカラムに対する条件がある。 (二つのうち一つが ‘=’ 照会でないこと)
  • インデックス順序:A,B,C,D順になった結合インデックス存在(インデックス カラムのうちA,B使用)
  • ORDER BY:C,D? インデックス カラムのうちA,Bは除いた残りカラムで整列

 Where節条件のカラムであるA,B二つのうち一つでもEQUAL照会でない場合、部分範囲処理をすることはできません。

 なぜなら、データがC,D順で整列する場合、インデックス カラムのうち、先行カラムであるAやBがEQUAL照会でなければ、インデックスを利用した整列を実行することができないためです。

 すなわち、AとBカラムの全部をEQUAL照会すれば、Order By節にC,Dカラムだけあってもインデックスの整列したデータは使えるようになります。しかし、A,BカラムのうちAカラムがEQUAL照会でなければ、Order By節をC,DでA,B,C,Dに変更することにより、はじめて部分範囲処理が可能となります。

 Where節、インデックス構成、Order By節の構成が部分範囲処理で可能な場合には、下記の通りとなります。


◆ 部分範囲処理が可能な例

  • WHERE条件- A、B (二つのうち一つでも‘=’照会でない場合)
  • インデックス順序- A、B,C,D? インデックス カラムのうちA,B使用
  • ORDER BY – A、B,C,D? インデックス カラムのうち全部整列


SQLチューニングブログ(第49回) 終



次回のOracle SQLチューニングは
「 PLANに現れるオペレーション中COUNTに騙されないでおこう 」です。

 それでは See you next time!!




CONTACT

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

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

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

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

平日 10時~18時

人気記事ランキング

タグ一覧