プランナーのコストパラメータ
これは、あなたのrandom_page_cost
およびseq_page_cost
おそらく間違っています。データベースの大部分がRAMにキャッシュされているか、SSD、キャッシュ付きSAN、またはランダムI / Oが本質的に高速なその他のストレージを使用しているため、高速ランダムI/Oを備えたストレージを使用している可能性があります。
試してみてください:
SET random_page_cost = 1;
SET seq_page_cost = 1.1;
コストパラメータの違いを大幅に減らしてから再実行します。その場合、ジョブはpostgresql.conf.
でこれらのパラメータを変更することを検討します。 。
行数の見積もりは妥当であるため、プランナーの見積もりの誤りやテーブル統計の不良の問題のようには見えません。
不正なクエリ
クエリも正しくありません。 OFFSET 0 LIMIT 1
ORDER BY
なし 一致するものが1つだけであることが保証されていない限り、予測できない結果が生成されます。一致する場合は、OFFSET ... LIMIT ...
句は不要であり、完全に削除できます。
通常は、SELECT max(...)
などのクエリを表現する方がはるかに優れています。 またはSELECT min(...)
可能であれば; PostgreSQLは、高価なテーブルスキャンやインデックススキャンと並べ替えを行うことなく、インデックスを使用して目的の値を取得できる傾向があります。
ヒント
ところで、将来の質問のために、PostgreSQLwikiには