コンテンツにスキップ

SELECTヒント

SELECTヒントは/*+ ... */形式のコメントブロックで、オプティマイザーの動作を制御したり、サンプリングなどのデータ処理を指定したりします。

ヒント構文

SELECT /*+ hint_clause */ ...
SELECT /*+ hint1 hint2 */ ...

ヒントはSELECTキーワードの直後の/*+ ... */ブロックに記述します。

主なヒント一覧

実行計画を制御するヒント

ヒント構文説明
PARALLEL/*+ PARALLEL(table, n) */並列処理係数を指定
NOPARALLEL/*+ NOPARALLEL(table) */並列処理を無効化
FULL/*+ FULL(table) */インデックススキャンの代わりにフルスキャンを強制
NO_INDEX/*+ NO_INDEX(table, index) */特定インデックスの使用を無効化
ROLLUP_TABLE/*+ ROLLUP_TABLE(rollup_table) */特定ROLLUPテーブルを強制選択
RID_RANGE/*+ RID_RANGE(table, start, end) */RID範囲を指定
SCAN_FORWARD/*+ SCAN_FORWARD(table) */古いレコードからスキャン(LOGテーブル)
SCAN_BACKWARD/*+ SCAN_BACKWARD(table) */新しいレコードからスキャン(LOGテーブル)

データ処理ヒント

ヒント構文説明
SAMPLING/*+ SAMPLING(SamplingRate) */実数値で指定した割合に従ってデータを抽出

-- 8スレッドで並列処理
SELECT /*+ PARALLEL(sensor_log, 8) */ sensor, AVG(value)
  FROM sensor_log
 WHERE ts BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD')
               AND TO_DATE('2024-01-31', 'YYYY-MM-DD')
 GROUP BY sensor;

-- 特定インデックスを使用しない
SELECT /*+ NO_INDEX(sensor_log, idx_ts) */ *
  FROM sensor_log
 WHERE ts > TO_DATE('2024-01-01', 'YYYY-MM-DD');

-- ROLLUPテーブルを強制選択
SELECT /*+ ROLLUP_TABLE(_rollup_tag_value_min) */
       name, rollup('min', 5, time) AS t, AVG(value)
  FROM tag
 WHERE name = 'TEMP-01'
 GROUP BY name, t;

-- 条件に一致する行を最大100,000行に制限した範囲から1%を抽出
SELECT /*+ SAMPLING(0.01) */ t_name, time, value
  FROM tag
 WHERE t_name = 'TAG_99'
 LIMIT 100000;

下位項目

  • SAMPLING hint — 割合を指定するサンプリングヒントの詳細

関連ドキュメント

最終更新日