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

Postgresql 9.x:Chỉ mục để tối ưu hóa các truy vấn `xpath_exists` (XMLEXISTS)

Các thông số chi phí của công cụ lập kế hoạch

Điều này cho tôi biết rằng random_page_cost của bạn và seq_page_cost có lẽ là sai. Bạn có thể đang sử dụng bộ nhớ với I / O ngẫu nhiên nhanh - bởi vì hầu hết cơ sở dữ liệu được lưu trong bộ nhớ cache trong RAM hoặc vì bạn đang sử dụng SSD, SAN có bộ nhớ đệm hoặc bộ lưu trữ khác mà I / O ngẫu nhiên vốn đã nhanh.

Hãy thử:

SET random_page_cost = 1;
SET seq_page_cost = 1.1;

để giảm đáng kể chênh lệch tham số chi phí và sau đó chạy lại. Nếu điều đó xảy ra, hãy xem xét việc thay đổi các thông số đó trong postgresql.conf. .

Ước tính số hàng của bạn là hợp lý, vì vậy, nó không giống như vấn đề ước tính sai của người lập kế hoạch hoặc vấn đề với thống kê bảng không hợp lệ.

Truy vấn không chính xác

Truy vấn của bạn cũng không chính xác. OFFSET 0 LIMIT 1 không có ORDER BY sẽ tạo ra kết quả không thể đoán trước trừ khi bạn được đảm bảo có chính xác một kết quả phù hợp, trong trường hợp đó, OFFSET ... LIMIT ... các mệnh đề không cần thiết và có thể bị xóa hoàn toàn.

Bạn thường tốt hơn nhiều khi viết các truy vấn như SELECT max(...) hoặc SELECT min(...) có thể ở đâu; PostgreSQL sẽ có xu hướng có thể sử dụng một chỉ mục để loại bỏ giá trị mong muốn mà không cần thực hiện quét bảng đắt tiền hoặc quét chỉ mục và sắp xếp.

Mẹo

BTW, đối với các câu hỏi trong tương lai, wiki PostgreSQL có một số thông tin hữu ích trong danh mục hiệu suất và hướng dẫn đặt Câu hỏi truy vấn chậm .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi ActiveRecord ::StatementInvalid, PG ::UndefinedTable, nhưng SQL được tạo hoạt động

  2. PostgreSQL - truy vấn dựa trên chỉ mục GIN của giá trị HSTORE

  3. Truy vấn jsonb postgres trên đối tượng lồng nhau

  4. Dữ liệu lớn với PostgreSQL và Apache Spark

  5. Tại sao st_intersection trả về không phải là đa giác?