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

Tại sao người lập kế hoạch đưa ra các kết quả khác nhau cho các chức năng có độ bay hơi khác nhau?

Nó ước tính 1000 hàng

1000 hàng ước tính là giá trị mặc định được ghi lại trong TẠO CHỨC NĂNG :

Khi một hàm được khai báo là biến động, hàm đó yêu cầu không được nội dòng, vì vậy giá trị mặc định này cho result_rows nắm giữ.

Mặt khác, khi nó được nội tuyến trong một truy vấn như trong thử nghiệm thứ hai của bạn, số hàng sẽ được ước tính như thể phần thân của hàm đã được chuyển vào truy vấn và khai báo hàm không tồn tại. Điều này dẫn đến thử nghiệm thứ hai đến một ước tính chính xác kể từ VALUES mệnh đề có thể được đánh giá trực tiếp.

Chính xác thì người lập kế hoạch đang làm gì ở đây và tôi có thể đọc một số tài liệu về nó ở đâu?

Nói chung, các chiến lược tối ưu hóa của người lập kế hoạch không được giải thích trong tài liệu chính. Chúng được thảo luận trong danh sách gửi thư và được đề cập trong các bình luận mã nguồn, may mắn thay, chúng có xu hướng đặc biệt rõ ràng và được viết tốt (so với mã nguồn trung bình). Trong trường hợp nội tuyến hàm, tôi tin rằng nhận xét của inline_set_returning_functions inline_set_returning_ Chức năng tiết lộ hầu hết các quy tắc thúc đẩy sự tối ưu hóa cụ thể này. (cảnh báo:các liên kết trên nằm trong nhánh chính hiện tại có thể thay đổi hoặc trôi dạt bất cứ lúc nào).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TẠO NGÔN NGỮ plpython3u - PostgreSQL 9.6

  2. Tổng hợp kết nối Postgresql ở Erlang

  3. Làm cách nào để sửa lỗi phiên bản pg_dump không khớp?

  4. Đã xảy ra lỗi khi cài đặt pg (0.18.2) và Bundler không thể tiếp tục

  5. Cách nhanh nhất để thực hiện truy vấn xóa trong bảng lớn trong PostgreSQL