S-JIS[2008-04-29] 変更履歴

ヒント

OracleSQL文では、オプティマイザー(が実行計画を立てるの)を助けるヒントというものを書くことが出来る。


ヒントの書き方

SELECT・UPDATE・DELETE文において、「SELECT」「UPDATE」といった語の直後にヒントを書く。

コメントの記号「/*」の直後に「+」を付けるとヒントになる。
また同様に、行コメント「--」の直後に「+」を付けてもヒントになる。

select /*+ ヒント */
 項目,…
from テーブル;
select --+ ヒント
 項目,…
from テーブル;

一見すると普通にコメントの様に見える。
実際、ヒントの書き方が間違っていてもコメントとして無視されるようで、エラーになったりしない。そういう意味でちょっと分かりにくい。
したがって、ヒントを書いたら、EXPLAIN文SQL*PlusのAUTOTRACEを使って 思い通りの実行計画になったかどうかを確認しなければならない。


テーブル名の指定方法

ヒントの中には、ヒントの対象となるテーブルを指定するものがある。
この場合、from句に書かれているテーブル名をそのまま指定しないといけないらしい。すなわち別名を定義している場合は その別名を書く。

from ヒント 結果
emp emp
emp e emp ×
emp e e
scott.emp scott.emp ×
scott.emp emp

ただ、from句でスキーマ名を指定した場合(「scott.emp」)は ヒントではスキーマ名を付けてはいけないようだ。


インデックス

インデックス(索引)を使うように指示するヒントは、INDEXを使う。

select /*+ INDEX(テーブル名 インデックス名) */ * from テーブル名;

テーブル名とインデックス名の間には空白を入れて区切るが、カンマで区切ってもいいようだ。

逆にインデックスを使わない(フルスキャンを行う)ように指示するヒントは、FULLを使う。

select /*+ FULL(テーブル名) */ * from テーブル名;

SQLメモへ戻る / 実行計画の確認方法へ戻る / Oracle目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま