Jika perencana kueri membuat keputusan yang buruk, sebagian besar adalah salah satu dari dua hal:
1. Statistik tidak akurat.
Apakah Anda menjalankan ANALYZE cukup? Juga populer dalam bentuk gabungannya VACUUM ANALYZE . Jika autovacuum aktif (yang merupakan default di Postgres modern), ANALYZE dijalankan secara otomatis. Tapi pertimbangkan:
- Apakah VACUUM ANALYZE reguler masih direkomendasikan di bawah 9.1?
Jika meja Anda besar dan distribusi data tidak teratur , menaikkan default_statistics_target mungkin membantu. Atau lebih tepatnya, cukup tetapkan target statistik untuk kolom yang relevan (yang ada di WHERE atau JOIN klausa pertanyaan Anda, pada dasarnya):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
Target dapat diatur dalam kisaran 0 hingga 10.000;
Jalankan ANALYZE lagi setelah itu (pada tabel yang relevan).
2. Setelan biaya untuk perkiraan perencana tidak aktif.
Baca bab Konstanta Biaya Planner dalam manual.
Lihat bab default_statistics_target dan biaya_halaman_acak pada halaman Wiki PostgreSQL yang umumnya membantu ini.
Ada banyak kemungkinan alasan lain, tetapi sejauh ini yang paling umum.