PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Giữ cho PostgreSQL đôi khi chọn một kế hoạch truy vấn tồi

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 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ưu và nhược điểm của việc thực hiện các phép tính trong sql so với trong ứng dụng của bạn là gì

  2. Sử dụng con trỏ để phân trang trong PostgreSQL

  3. LỖI PostgreSQL:hủy tuyên bố do xung đột với khôi phục

  4. K-Nearest Neighbor Query trong PostGIS

  5. Cấu trúc lại một hàm PL / pgSQL để trả về kết quả đầu ra của các truy vấn SELECT khác nhau