

postgres SQL で複雑な select 文を投げていて、そのパフォーマンスがでていなかったとします。

その select 文を explain してみると、どのように postgres が select
を実行するかは説明されますが、なぜそのような実行計画がたてられたのかがよくわからない場合、これはどのようにデバッグされるのでしょうか。

MySQL では optimizer trace があるので、それを眺めているとなんとなく、オプティマイザがどう動いたのかが理解できるのですが、
postgres ではどうなのだろと思い、質問しています。


CC BY-SA 4.0
2018-07-14T04:45:14.293
45604
2018-07-14T15:40:02.627
754
question
postgresql
postgres の select 実行計画のデバッグをするには


PostgreSQLのマニュアルでいうと、[プランナで使用される統計情報](https://www.postgresql.jp/document/10/html/planner-
stats.html)に実行計画の決定条件が記載されています。これを読んで出てきた実行計画が期待のものか判断することができると思います。

＃ただ、実行計画を「チューニング」することはあっても「デバッグ」することはほとんどないかと思います。(SQL文に対し静的に決まるものではなく、テーブルデータ数等で動的に変化するものなので)  
実行計画を制御するなら、hint句(要 `pg_hint_plan`パッケージ)を使用する方法もあります。


CC BY-SA 4.0
2018-07-14T15:40:02.627
46615
2018-07-14T15:40:02.627
20098
45604
answer