ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
SQLの再利用
スポンサード リンク

● 大文字/小文字/空白や改行の数を統一する
  
  処理内容が同じSQLでも、大文字/小文字/空白や改行の数が異なると、別々にキャッシュされてしまい、解析済みのSQLが共有されなくなるので、その分パフォーマンスが低下する。

  SQLのコーディング方法を統一して、キャッシュ上で共有されるようにしましょう。

下記4つのSQLは、処理内容は同じですが、それぞれ、メモリ上にキャッシュされ、再利用されません。
大文字/小文字/空白や改行の数は異なるので、違うSQLと解釈される。
 select * from dept;

 select * from DEPT;

 select   * from dept;

 select *
     from dept;


● バインド変数を使用する
  SQLで、変数の値を設定する場合は、バインド変数を使用することによって、SQLが共有されます。
 ○ select * from dept where dept_id = :dept_id;

 × select * from dept where dept_id = 'D001';
   ※バインド変数の指定方法は、JAVA、SQLPLUS、ProCなど実行環境で異なる


● 初期化パラメータ「CURSOR_SHARING」を使用すれば、大文字/小文字/空白や改行の数を統一や、バインド変数を使用しなくても、同じSQLを共有できるようになります。

しかしながら、「CURSOR_SHARING」の変更に伴って遅くなるSQLがでる可能性もあるので、「CURSOR_SHARING」の変更は慎重にする必要があります。


スポンサード リンク


大文字/小文字/空白や改行の数を統一する
バインド変数を使用する
ワイルドカード「 * 」は使用しない
ANDよりBETWEENの使用を検討する
HAVINGよりWHEREの使用を検討する
UNIONよりUNION ALLの使用を検討する
テーブルに別名を付ける
ROWIDの使用を検討する
列番号は使用しない
DISTINCT句よりEXISTS句の使用を検討する
NOT IN句よりNOT EXISTS句の使用を検討する
INDEX列を使用しない検索(1)
INDEX列を使用しない検索(2)

SQLチューニングへ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ