サイトアイコン SE日記

【SQL】ハードパースを削減する方法


ここでは、ORACLEデータベースでハードパースを削減する方法を紹介します。

SQLのハードパースを削減させるには、出来る限り同じSQLを実行する必要があります。

ハードパースの基礎的な内容や回数を確認する方法は↓で紹介していますのでぜひ参考にしてください。
>>【ORACLE】ハードパースとは
>>【SQL】ハードパースされた回数を確認する方法

よく使うSQLは全く同じにする

例えばシステム全体で参照するテーブルへアクセスするSQLなどは全く同じSQLを使うようにします。
・大文字や小文字
・空白や改行の位置や数
・抽出条件

SQLは一言一句同じ内容になるようにします。

バインド変数を利用する

SQLの抽出条件の値が違うだけの場合はバインド変数を利用しましょう。
WHERE句の条件をアプリケーションで組み立てるのではなく、バインド変数を利用するようにしてください。

これにより同一のプログラムから実行されるSQLは同じSQLとして認識されます。

初期化パラメータの変更

CURSOR_SHARINGという初期化パラメータを変更することでバインド変数を使用していないSQLも同一のものとして認識するように変更できます。

これをやるときはきっと、アプリケーションでの対応が不可能だというだと思います。

これまで私はこの対応に踏み切ったことはありませんので効果は定かではありません。

※ただし、システム全体のパフォーマンスにも影響するため、DBAに相談の上、対応を進めてください。

まとめ

ハードパースを削減する方法を3つ紹介しました。
 ・よく使うSQLは全く同じにする
 ・バインド変数を利用する
 ・初期化パラメータの変更

SQLが解析されると実行計画が作成されます。
実行計画については↓で詳しく解説していますので参考にしてください。
>>【ORACLE】オプティマイザと実行計画について

モバイルバージョンを終了