質問: postgres SQL で複雑な select 文を投げていて、そのパフォーマンスがでていなかったとします。 その select 文を explain してみると、どのように postgres が select を実行するかは説明されますが、なぜそのような実行計画がたてられたのかがよくわからない場合、これはどのようにデバッグされるのでしょうか。 MySQL では optimizer trace があるので、それを眺めているとなんとなく、オプティマイザがどう動いたのかが理解できるのですが、 postgres ではどうなのだろと思い、質問しています。
回答: PostgreSQLのマニュアルでいうと、プランナで使用される統計情報に実行計画の決定条件が記載されています。これを読んで出てきた実行計画が期待のものか判断することができると思います。 #ただ、実行計画を「チューニング」することはあっても「デバッグ」することはほとんどないかと思います。(SQL文に対し静的に決まるものではなく、テーブルデータ数等で動的に変化するものなので) 実行計画を制御するなら、hint句(要 `pg_hint_plan`パッケージ)を使用する方法もあります。