tác giả:Được viết bởi Tom Lane (<tgl@sss.pgh.pa.us) trên 2000-01-24
Lưu ý:Điều này cuối cùng phải trở thành một phần của nhiều Chương lớn hơn về việc viết các phương thức truy cập chỉ mục mới.
Mọi phương thức truy cập chỉ mục phải cung cấp ước tính kèo bóng đá c1 phí chức năng để sử dụng bởi người lập kế hoạch/tối ưu hóa. Thủ tục oid của Chức năng này được đưa ra trongAmcostestimateTrường của phương thức truy cậppg_amEntry.
Lưu ý:Trước Postgres 7.0, một sơ đồ khác là được sử dụng để đăng ký ước tính kèo bóng đá c1 phí cụ thể chỉ số chức năng.
7127_7756
Mỗi hàm amcostestimate phải có chữ ký:
VOID Amcostestimate (truy vấn *root, Reloptinfo *rel, IndexoptInfo *index, Danh sách *Indexquals, kèo bóng đá c1 phí *IndexStartUpCost, kèo bóng đá c1 phí *indextotalcost, Chọn lọc *indexSelectivity);Bốn tham số đầu tiên là đầu vào:
Truy vấn đang được xử lý.
Mối quan hệ chỉ mục.
chính chỉ mục.
Danh sách các điều khoản của INDEX Qualauses (ngầm Anded); một số Danh sách cho biết không có vòng loại nào có sẵn.
Ba tham số cuối cùng là đầu ra từng tham kèo bóng đá c1ếu:
Đặt thành kèo bóng đá c1 phí xử lý khởi động chỉ mục
Đặt thành tổng kèo bóng đá c1 phí xử lý chỉ mục
Đặt thành chỉ mục chọn lọc
Lưu ý rằng các chức năng ước tính kèo bóng đá c1 phí phải được viết bằng C, không phải trong SQL hoặc bất kỳ ngôn ngữ tố tụng có sẵn nào, bởi vì chúng phải Truy cập cấu trúc dữ liệu nội bộ của trình lập kế hoạch/tối ưu hóa.
9295_9839
kèo bóng đá c1 phí truy cập nên bao gồm tất cả các kèo bóng đá c1 phí đĩa và CPU liên quan đến việc quét chỉ số, nhưng không phải là kèo bóng đá c1 phí của lấy hoặc xử lý các bộ dữ liệu chính được xác định bởi chỉ mục.
"kèo bóng đá c1 phí khởi động" là một phần của tổng kèo bóng đá c1 phí quét mà Phải được sử dụng trước khi chúng ta có thể bắt đầu tìm nạp tuple đầu tiên. Đối với hầu hết các chỉ mục, điều này có thể được coi là 0, nhưng một loại chỉ mục với kèo bóng đá c1 phí khởi động cao có thể muốn đặt nó không khác.
10321_10596
Dự toán kèo bóng đá c1 phí
Công cụ ước tính kèo bóng đá c1 phí điển hình sẽ được tiến hành như sau:
Ước kèo bóng đá c1 và trả lại phần của các bộ dữ liệu chính của bảng chính sẽ được truy cập dựa trên các điều kiện chất lượng nhất định. TRONG sự vắng mặt của bất kỳ kiến thức cụ thể theo kiểu chỉ mục nào, sử dụng Chức năng tối ưu hóa tiêu chuẩn clauselist_selectivity ():
*indexSelectivity = Clauselist_selectivity (root, indexquals, lfirsti (rel- relids));
11236_11556
Ước kèo bóng đá c1 số lượng trang chỉ mục sẽ Truy cập trong quá trình quét. Đây có thể chỉ là IndexSelectivity thời gian kích thước của chỉ mục trong các trang.
Tính kèo bóng đá c1 phí truy cập chỉ mục. Một công cụ ước tính chung có thể Làm điều này:
11907_12364
Ví dụ về các chức năng ước tính kèo bóng đá c1 phí có thể được tìm thấy trongsrc/backend/utils/adt/selfuncs.c.
Theo quy ước,PG_PROCmục cho MỘTAmcostestimateHàm nên trình diễn
Prorettype = 0 pronargs = 7 proArgTyPes = 0 0 0 0 0 0 0Chúng tôi sử dụng số không ("mờ đục") cho tất cả các đối số vì không có đối số nào chúng có các loại được biết đến trong pg_type.