PostgreSQL: soi kèo bóng đá truoctran liệu: 9 | |||
---|---|---|---|
prev | UP | Chương 48. Tổng quan về PostgreSQL Internals | NEXT |
Nhiệm vụ củaMáy lập tỷ lệ kèo bóng đá tối nay hóalà tạo ra một tỷ lệ kèo bóng đá tối nay 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 đá tối nay thực thi có thể, cuối cùng chọn tỷ lệ kèo bóng đá tối nay thực thi dự kiến sẽ chạy nhanh nhất.
Lưu ý: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 đá tối nay 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 A11670_11695(xemChương 57) 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 đá tối nay thực sự hoạt động với các cấu trúc dữ liệu được gọi làđường dẫn, đơn giản là các biểu diễn cắt giảm của các tỷ lệ kèo bóng đá tối nay chỉ chứa nhiều thông tin như người lập tỷ lệ kèo bóng đá tối nay 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 đá tối nayđượ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 đá tối nay 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 đá tối nay.
Trình lập tỷ lệ kèo bóng đá tối nay/trình tối ưu hóa bắt đầu bằng cách tạo tỷ lệ kèo bóng đá tối nay 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 đá tối nay 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 đá tối nay 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ệ.Attributionxảy ra để khớp với khóa của chỉ mục B-cây vàOPRlà 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 đá tối nay 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 đá tối nay 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ởimệ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 đá tối nay tham gia quan hệ được xem xét sau khi tất cả các tỷ lệ kèo bóng đá tối nay 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ối nayt 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 gia14819_15072
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 đá tối nay 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 đá tối nay ư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 trongWHERETrình độ chuyên môn (tức là, trong đó một hạn chế nhưtrong đó rel1.attr1 = rel2.ATTR215751_16070
Khigeqo_thresholdbị vượt quá, tỷ lệ kèo bóng đá tối nay chuỗi tham gia được xem xét được xác định bởi heuristic, như được mô tả trongChương 57. Nếu không thì quá trình này giống nhau.
Cây tỷ lệ kèo bóng đá tối nay đã 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 đá tối nay này đều có khả năng thực hiện bổ sunglựa chọn(vứt bỏ tỷ lệ kèo bóng đá tối nay 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 đá tối nay là đính kèm các điều kiện lựa chọn từWHEREmệ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 đá tối nay.