適切なヒント句が使えるようになるとできる人にみえるよね。
オプティマイザに実行方法を直接指示する方法です。
1.記述箇所
“SELECT”、”UPDATE”、”INSERT”、”DELETE”の後ろに”/*+ <ヒント> */”で記述する。
2.主要なヒント句一覧
ヒント句 | 概要 |
---|---|
CHOOSE | オプティマイザモードをCHOOSEに設定する(※1) |
RULE | 統計情報の有無にかかわらず、RBOで動作する |
FIRST_ROWS | オプティマイザモードをFIRST_ROWSに設定する |
FIRST_ROWS(<最適行数>) | オプティマイザモードをFIRST_ROWS_nに設定する |
ALL_ROWS | オプティマイザモードをALL_ROWSに設定する |
FULL(<テーブル名>) | 指定されたテーブルのフルテーブルスキャンを行う |
INDEX(<テーブル名> <インデックス名>) | 指定されたテーブルへのアクセスに指定されたインデックスを使用する(※2) |
INDEX_DESC(<テーブル名> <インデックス名>) | 指定されたテーブルへのアクセスに指定されたインデックスを逆順に使用する |
INDEX_FFS(<テーブル名> <インデックス名>) | 指定されたテーブルへの高速全索引スキャンを行う。 |
USE_NL(<テーブル名>) | 指定されたテーブルが結合されるときにネステッド・ループ結合を使用する |
USE_MERGE(<テーブル名>) | 指定されたテーブルが結合されるときにソート/マージ結合を使用する |
USE_HASH(<テーブル名1> <テーブル名2>) | 指定したテーブルが結合されるときにハッシュ結合を使用する |
ORDERED | FROM句に記述された順番でテーブルを結合する |
LEADING(<テーブル名1> <テーブル名2>) | 指定した順番でテーブルを結合する |
※1.オプティマイザモード
モード | 概要 |
---|---|
CHOOSE | デフォルト値。SQLの対象テーブルに1つでも統計情報があればCBO、1つもなければRBOとなる。CBOの動きはALL_ROWSと同じ。 |
RULE | 統計情報の有無に関係なく強制的にRBO |
FIRST_ROWS | 最初の1行の応答時間を最小に抑える実行計画を選択する。統計情報の有無に関係なくCBO |
FIRST_ROWS_n | 最初のn行の応答時間を最小に抑える実行計画を選択する。統計情報の有無に関係なくCBO |
ALL_ROWS | 全体の応答時間を最小に抑える実行計画を選択する。統計情報の有無に関係なくCBO |
※2.INDEXヒントの記述方法
(1) ヒントを複数記述する
テーブルeに対しインデックス「PK_EMP」を使用し、テーブルdに対しインデックス「IDX_EMP1」を使用する。
INDEXヒント以外でも複数ヒントは同じ記述。
(2) 括弧内に複数のインデックスを記述する
「PK_EMP」と「IDX_EMP1」の適切な方をオプティマイザに選択させる。
※3.カンマ
INDEXヒントのテーブル名とインデックス名、LEADINGヒントのテーブル名の間にカンマ(,)を入れてもいい。入れなくてもいい。