SQLの最適化によるOracle7パフォーマンスの向上


●UPDATEやDELETE時のWHERE句はROWIDを指定する
 WHERE句付きのUPDATE、DELETE文は負荷が高いので、先にSELECT文でROWIDを取得してからUPDATE、DELETE文のWHERE句にROWIDを設定する。

●DECODE文を活用する
 DECODE(expr,search1,return1,search2,return2,search3,return3,・・・,[default])を使用する。
 WHERE句やIF文を多く使用する必要がある場合はDECODE文が使えないか検討する必要がある。DECODE文は走査数を大きく軽減するものとして用意されているものである。

●ホスト配列を活用する
 複数レコードをFETCH文で読み込む場合、配列変数に格納していくと負荷を減らすことができる。

●インデックスをわざと使わない
 検索の実行においてはインデックスを使用するとかえって遅くなる場合がある。
 たとえば社員番号が1111以外のデータを探す場合とか、地域が京都以外のデータを探す場合などでは全件検索の方が早くなる。
 このテクニックはOracleだけでなく、索引のあるファイルシステムを使用する場合に共通するテクニックである。
 Oracleではインデックスのある項目をWHERE句で指定する場合、「項目名+0」(数値)や「項目名||''」(文字列)とすることによって、検索にインデックスが使用されない。

●WHERE句にインデックス項目と非インデックス項目とをANDやORで結び付けない
 WHERE句の指定でインデックス項目と非インデックス項目とを直接ANDやORで結び付けてしまうと、全件検索になってしまう。
 絞込みのためには副問い合わせを使用する。

情報化ヒント集(Tips)に戻る情報化ヒント集(Tips)に戻る
ホームページに戻る ホームページに戻る