
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!!