Nếu người lập kế hoạch truy vấn đưa ra quyết định không tốt thì đó chủ yếu là một trong hai điều:
1. Thống kê không chính xác.
Bạn có chạy ANALYZE
không đầy đủ? Cũng phổ biến ở dạng kết hợp VACUUM ANALYZE
. Nếu bật autovacuum (mặc định trong Postgres ngày nay), hãy ANALYZE
được chạy tự động. Nhưng hãy cân nhắc:
- PHÂN TÍCH KHÔNG KHÍ thông thường có còn được khuyến nghị dưới 9.1 không?
Nếu bàn của bạn là lớn và phân phối dữ liệu không đều , nâng cao default_statistics_target
có thể giúp. Hay đúng hơn, chỉ cần đặt mục tiêu thống kê cho các cột có liên quan (những cột trong WHERE
hoặc JOIN
về cơ bản các mệnh đề truy vấn của bạn):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
Mục tiêu có thể được đặt trong phạm vi từ 0 đến 10000;
Chạy ANALYZE
một lần nữa sau đó (trên các bảng có liên quan).
2. Cài đặt chi phí vì các ước tính của người lập kế hoạch bị tắt.
Đọc chương Hằng số chi phí của người lập kế hoạch trong sách hướng dẫn.
Xem các chương default_st Statistics_target và random_page_cost trên trang Wiki PostgreSQL thường hữu ích này.
Có nhiều lý do có thể xảy ra khác, nhưng đây là những lý do phổ biến nhất cho đến nay.