PostgreSQLでヒント句を使う【pg_hint_plan】

PostgreSQLでヒント句が使えない?効かない?そんなときのTipsです。

PostgreSQLでヒント句を使えるようにするにはpg_hint_planを有効する必要があるのは大前提ですが、Oracleと同じ感覚でヒント句を使おうとするとうまくいかないことがあります。

pg_hint_plan

GitHub - ossc-db/pg_hint_plan: Extension adding support for optimizer hints in PostgreSQL
Extension adding support for optimizer hints in PostgreSQL - ossc-db/pg_hint_plan

詳しいことはサイトに書いてますが、ヒント句が有効になるルールがあります。

ヒント句より前の文字列の制限

ヒント句より前に使える文字列には制限があります。

  • アルファベット
  • 数字
  • スペース
  • アンダースコア
  • コンマ
  • 括弧以外の文字

NGケースはOracleなどでは大丈夫な書き方ですが、ヒント句より前にコメントを書くことさえNGです。

--NGケース
SELECT /** SampleSQL */ /*+ IndexScan(hoge)*/ * FROM hoge;

--OKケース(コメント書かない、SELECTより前に記載するなどで回避する。)
SELECT /*+ IndexScan(hoge)*/ * FROM hoge;
/*+ IndexScan(hoge)*/ SELECT /** SampleSQL */  * FROM hoge;

テーブル名や別名の制限

テーブル名や別名は大文字小文字を区別するので、正確に書かなければなりません。
テーブル名はオブジェクト名なので注意が必要です。
※ここでいうオブジェクト名はpg_classテーブルのtablenameを指します。
テーブル名は単語の先頭文字を大文字にするパスカルケースとか、アンダースコアでつなぐスネークケースとかで書いたりすると思いますが同じ感じで書くと痛い目見るので注意。

--NGケース
SELECT /*+ IndexScan(HogeTable)*/ * FROM HogeTable;

--OKケース(オブジェクト名と一致させる、別名を使用する)
SELECT /*+ IndexScan(hogetable)*/ * FROM HogeTable;

コメント

タイトルとURLをコピーしました