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.