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