SQLのパフォーマンスチューニング系の話になります。
SQLの中で結合やらなんやらして複雑なSQLになり処理が遅いSQLになってしまうことがあります。
そのような際は実行計画を確認して、遅い原因を調べたりします。
INDEXを作って速度を改善させる事が多いですが、今日はヒント句について調べたのでそのことについて書こうと思います。
ヒント句はSQL文中にコメントとして記述して実行計画を明示的に指示することができます。
ヒント句はOracleのオプティマイザ(最適化エンジン)に対して実行計画の指示を与えるための機能です。
最適な実行計画が選ばれないことがあるため、こういったときにヒント句を使うと、望ましい実行計画を強制できます。
(統計情報が古い、特定の実行計画が性能上望ましいが、Oracleがそれを選ばない時など)
書き方は次のような感じ。
SELECT /*+ヒント句 */
・SELECT、UPDATE、INSERT、MERGEまたはDELETEに続けてコメントを指定する
・ヒント句を複数書く時は空白で区切る。
よく使うヒント句について以下にまとめてみた。
| ヒント句 | 説明 | 書き方 |
|---|---|---|
| INDEX | インデックスを利用する | INDEX(テーブル名 テーブルのインデックス名) |
| USE_MERGE | マージ結合を使用して結合 | USE_MERGE(テーブル名1 テーブル名2) |
| USE_HASH | ハッシュ結合を使用して結合 | USE_HASH(テーブル名1 テーブル名2) |
| FULL | 指定した表に対して全表スキャンを実行 | FULL(テーブル名) |
| ORDERED | FROM句に書かれた順番でテーブルを結合 | ORDERED |
| LEADING | テーブルの結合順序を指定した順番に結合 | LEADING(テーブル名1,テーブル名2,テーブル名3) |