tác giả:Viết bởiTom Lanetrê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 một phần lớn hơn nhiều Chương về viết các phương thức truy cập kèo bóng đá c1 mới.
Mọi phương pháp truy cập kèo bóng đá c1 phải cung cấp ước tính chi 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.
Hàm Amcostestimate được đưa ra một danh sách các điều khoản đã được xác định là có thể sử dụng với chỉ số. Nó phải Ước tính trả về chi phí truy cập kèo bóng đá c1 và tính chọn lọc của các mệnh đề ở đâu (nghĩa là phần của Các bộ dữ liệu chính sẽ được truy xuất trong quá trình quét kèo bóng đá c1). Đối với những trường hợp đơn giản, gần như tất cả các công việc của công cụ ước tính chi phí có thể thực hiện bằng cách gọi các thói quen tiêu chuẩn trong trình tối ưu hóa; điểm của Có chức năng Amcostestimate là cho phép các phương thức truy cập kèo bóng đá c1 để cung cấp kiến thức cụ thể theo chỉ số, trong trường hợp có thể cải thiện các ước tính tiêu chuẩn.
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ệ kèo bóng đá c1.
chính kèo bóng đá c1.
Danh sách các điều khoản của INDEX Qualauses (ngầm Anded); một danh sách nil cho biết không có vòng loại nào có sẵn.
Ba tham số cuối cùng là các đầu ra từng tham kèo bóng đá c1ếu:
Đặt thành chi phí xử lý khởi động kèo bóng đá c1
Đặt thành tổng chi phí xử lý kèo bóng đá c1
Đặt thành kèo bóng đá c1 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ữ thủ tục có sẵn nào, vì họ phải truy cập Cấu trúc dữ liệu nội bộ của trình lập kế hoạch/trình tối ưu hóa.
Chi phí truy cập kèo bóng đá c1 phải được tính toán trong các đơn vị được sử dụng bởi SRC/phụ trợ/tối ưu hóa/đường dẫn/chi phí .c: Khối đĩa tuần tự tìm nạp có chi phí 1,0, một lần tìm nạp không có chi phí Random_page_cost và chi phí xử lý một bộ chỉ số nên thường được coi là cpu_index_tuple_cost (đó là một Tham số tối ưu hóa điều chỉnh người dùng). Ngoài ra, một bội số của CPU_OPERATOR_COST nên được tính cho bất kỳ so sánh nào các nhà khai thác được gọi trong quá trình xử lý chỉ số (đặc biệt là đánh giá bản thân kèo bóng đá c1).
Chi phí truy cập nên bao gồm tất cả các chi phí đĩa và CPU liên quan đến việc quét chỉ số, nhưng không phải là chi phí của Truy xuất hoặc xử lý các bộ dữ liệu bảng chính được xác định bởi kèo bóng đá c1.
"Chi phí khởi động" là một phần của tổng chi phí quét 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 kèo bóng đá c1 này có thể được lấy dưới dạng 0, nhưng một loại kèo bóng đá c1 có độ cao Chi phí khởi động có thể muốn đặt nó không khác.
SymentSelectivity phải được đặt thành phần ước tính của Các bộ dữ liệu chính sẽ được truy xuất trong quá trình quét kèo bóng đá c1. Trong trường hợp chỉ số mất, điều này thường sẽ cao hơn phần của các bộ dữ điều kiện.
Dự toán kèo bóng đá c1 phí
Công cụ ước tính kèo bóng đá c1 phí thông thường sẽ được tiến hành như sau:
Ước tính và trả lại phần của các bộ dữ liệu chính của bảng chính mà sẽ được truy cập dựa trên các điều kiện chất lượng nhất định. Trong không có bất kỳ kiến thức cụ thể theo kiểu kèo bóng đá c1 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));
Ước tính số lượng các tổng kèo bóng đá c1 sẽ được truy cập Trong quá trình quét. Đối với nhiều loại kèo bóng đá c1, điều này giống như chỉ mụcSelectivity thời gian số lượng các bộ dữ liệu trong kèo bóng đá c1, nhưng Nó có thể là nhiều hơn. (Lưu ý rằng kích thước của kèo bóng đá c1 trong các trang và Tuples có sẵn từ struct indexOptInfo.)
Ước tính số lượng trang kèo bóng đá c1 sẽ được truy xuất Trong quá trình quét. Đây có thể chỉ là thời gian lập kèo bóng đá c1 kích thước của kèo bóng đá c1 trong các trang.
Tính chi phí truy cập kèo bóng đá c1. Một công cụ ước tính chung có thể Làm điều này:
/* * Giả định chung của chúng tôi là các trang kèo bóng đá c1 sẽ được đọc * tuần tự, vì vậy chúng có chi phí 1.0 mỗi cái, không phải ngẫu nhiên_page_cost. * Ngoài ra, chúng tôi tính phí để đánh giá các kèo bóng đá c1 tại mỗi bộ chỉ số. * Tất cả các chi phí được cho là được thanh toán tăng dần trong quá trình quét. */ *indexStartUpCost = 0; *indextotalcost = numIndExpages + .
Ví dụ về các chức năng của công cụ ước tính kèo bóng đá c1 phí có thể được tìm thấy trong.
Theo quy ước,PG_PROCkèo bóng đá c1 nhập choAmcostestimateHàm sẽ hiển thị
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.