Nhiệm vụ củaNgười lập tỷ lệ kèo bóng đá/Tối ưu hóalà tạo ra một tỷ lệ kèo bóng đá thực hiện tối ưu. Một truy vấn SQL đã cho (và do đó, một cây truy vấn) thực sự có thể được thực hiện theo nhiều cách khác nhau, mỗi cách sẽ tạo ra cùng một tập hợp kết quả. Nếu khả thi về mặt tính toán, trình tối ưu hóa truy vấn sẽ kiểm tra từng tỷ lệ kèo bóng đá thực thi có thể, cuối cùng chọn tỷ lệ kèo bóng đá thực thi dự kiến sẽ chạy nhanh nhất.
Trong một số tình huống, việc kiểm tra từng cách có thể trong đó một truy vấn có thể được thực thi sẽ mất quá nhiều thời gian và không gian bộ nhớ. Cụ thể, điều này xảy ra khi thực hiện các truy vấn liên quan đến số lượng lớn các hoạt động tham gia. Để xác định tỷ lệ kèo bóng đá truy vấn hợp lý (không nhất thiết là tối ưu) trong một khoảng thời gian hợp lý,PostgreSQLSử dụng ATrình tỷ lệ kèo bóng đá truy vấn di truyền(xemChương 59) Khi số lượng tham gia vượt quá ngưỡng (xemgeqo_threshold).
Quy trình tìm kiếm của người lập tỷ lệ kèo bóng đá thực sự hoạt động với các cấu trúc dữ liệu được gọi làđường dẫn, chỉ đơn giản là các biểu diễn cắt giảm các tỷ lệ kèo bóng đá chỉ chứa nhiều thông tin như người lập tỷ lệ kèo bóng đá cần đưa ra quyết định của mình. Sau khi con đường rẻ nhất được xác định, một bản đầy đủCây tỷ lệ kèo bóng đáđược xây dựng để chuyển cho người thực thi. Điều này thể hiện tỷ lệ kèo bóng đá thực hiện mong muốn một cách chi tiết đầy đủ để người thực thi chạy nó. Trong phần còn lại của phần này, chúng tôi sẽ bỏ qua sự khác biệt giữa các đường dẫn và tỷ lệ kèo bóng đá.
Trình lập tỷ lệ kèo bóng đá/trình tối ưu hóa bắt đầu bằng cách tạo tỷ lệ kèo bóng đá quét từng quan hệ riêng lẻ (bảng) được sử dụng trong truy vấn. Các tỷ lệ kèo bóng đá có thể được xác định bởi các chỉ mục có sẵn trên mỗi mối quan hệ. Luôn có khả năng thực hiện quét tuần tự trên một mối quan hệ, vì vậy một tỷ lệ kèo bóng đá quét tuần tự luôn được tạo ra. Giả sử một chỉ mục được xác định trên một mối quan hệ (ví dụ: chỉ mục B-cây) và truy vấn chứa hạn chếMối quan hệ.Attribution hằng số opr
. Nếu nhưMối quan hệ.Attribution
xảy ra để phù hợp với khóa của chỉ mục B-cây vàOPR
là một trong những toán tử được liệt kê trong chỉ mụcLớp toán tử, một tỷ lệ kèo bóng đá khác được tạo bằng chỉ mục B-cây để quét quan hệ. Nếu có các chỉ mục tiếp theo có mặt và các hạn chế trong truy vấn xảy ra để phù hợp với một khóa của một chỉ mục, các tỷ lệ kèo bóng đá tiếp theo sẽ được xem xét. Các gói quét chỉ mục cũng được tạo cho các chỉ mục có thứ tự sắp xếp có thể khớp với truy vấn củaĐặt hàng bởi
mệnh đề (nếu có) hoặc thứ tự sắp xếp có thể hữu ích để hợp nhất tham gia (xem bên dưới).
Nếu truy vấn yêu cầu tham gia hai hoặc nhiều quan hệ, các tỷ lệ kèo bóng đá tham gia quan hệ được xem xét sau khi tất cả các tỷ lệ kèo bóng đá khả thi đã được tìm thấy để quét các mối quan hệ đơn lẻ. Ba chiến lược tham gia có sẵn là:
Tham gia vòng lồng nhau: Mối quan hệ bên phải được quét một lần cho mỗi hàng được tìm thấy trong quan hệ bên trái. Chiến lược này rất dễ thực hiện nhưng có thể rất tốn thời gian. (Tuy nhiên, nếu mối quan hệ bên phải có thể được quét bằng quét chỉ mục, đây có thể là một chiến lược tốt.
Hợp nhất tham gia: Mỗi quan hệ được sắp xếp trên các thuộc tính tham gia trước khi tham gia bắt đầu. Sau đó, hai mối quan hệ được quét song song và các hàng phù hợp được tỷ lệ kèo bóng đát hợp để tạo thành các hàng tham gia. Loại tham gia này hấp dẫn hơn vì mỗi mối quan hệ chỉ phải được quét một lần. Việc sắp xếp bắt buộc có thể đạt được bằng một bước sắp xếp rõ ràng hoặc bằng cách quét mối quan hệ theo thứ tự thích hợp bằng cách sử dụng một chỉ mục trên khóa nối.
băm tham gia: Mối quan hệ đúng được quét và tải vào bảng băm, sử dụng các thuộc tính tham gia của nó làm khóa băm. Tiếp theo, mối quan hệ bên trái được quét và các giá trị thích hợp của mỗi hàng được tìm thấy được sử dụng làm khóa băm để xác định vị trí các hàng phù hợp trong bảng.
Khi truy vấn liên quan đến nhiều hơn hai mối quan hệ, kết quả cuối cùng phải được xây dựng bởi một cây các bước nối, mỗi bước có hai đầu vào. Người lập tỷ lệ kèo bóng đá kiểm tra các chuỗi tham gia có thể khác nhau để tìm cái rẻ nhất.
Nếu truy vấn sử dụng ít hơngeqo_thresholdQuan hệ, tìm kiếm gần như đã được thực hiện để tìm chuỗi tham gia tốt nhất. Người lập tỷ lệ kèo bóng đá ưu tiên xem xét tham gia giữa bất kỳ hai mối quan hệ nào tồn tại một mệnh đề tham gia tương ứng trongWHERE
Trình độ chuyên môn (tức là, trong đó một hạn chế nhưtrong đó rel1.attr1 = rel2.ATTR2
tồn tại). Tham gia các cặp không có mệnh đề tham gia chỉ được xem xét khi không có lựa chọn nào khác, nghĩa là, một mối quan hệ cụ thể không có điều khoản tham gia nào cho bất kỳ mối quan hệ nào khác. Tất cả các tỷ lệ kèo bóng đá có thể được tạo cho mỗi cặp tham gia được xem xét bởi người lập tỷ lệ kèo bóng đá và một tỷ lệ kèo bóng đá (ước tính là) giá rẻ nhất được chọn.
Khigeqo_threshold
bị vượt quá, các chuỗi tham gia được xem xét được xác định bởi heuristic, như được mô tả trongChương 59. Nếu không thì quá trình này giống nhau.
Cây tỷ lệ kèo bóng đá đã hoàn thành bao gồm các lần quét tuần tự hoặc chỉ mục của các quan hệ cơ sở, cộng với các nút nối, hợp nhất hoặc băm khi cần thiết, cộng với bất kỳ bước phụ trợ nào cần thiết, chẳng hạn như các nút sắp xếp hoặc các nút tính toán chức năng tổng hợp. Hầu hết các loại nút tỷ lệ kèo bóng đá này đều có khả năng thực hiện bổ sungLựa chọn(vứt bỏ các hàng không đáp ứng điều kiện boolean được chỉ định) vàDự đoán(Tính toán của một cột dẫn xuất dựa trên các giá trị cột đã cho, nghĩa là đánh giá các biểu thức vô hướng khi cần thiết). Một trong những trách nhiệm của người lập tỷ lệ kèo bóng đá là đính kèm các điều kiện lựa chọn từở đâu
mệnh đề và tính toán các biểu thức đầu ra cần thiết cho các nút thích hợp nhất của cây tỷ lệ kèo bóng đá.