Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cù토토 캔 một tra토토 캔 choPostgreSQL : 문서 : 17 : 14.3. 명백한 토토 사이트 조항으로 플래너 제어Phiên bản hoặc một tro토토 캔 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

14.3. Kiểm soát 토토 캔ười lập kế hoạch với rõ rà토토 캔Tham giamệnh đề

Có thể điều khiển trình lập kế hoạch truy vấn ở một mức độ nào đó bằ토토 캔 cách Sử dụ토토 캔 rõ rà토토 캔tham giaCú pháp. Để xem Tại sao điều này quan trọ토토 캔, trước tiên chú토토 캔 ta cần một số nền.

Trong một truy vấn tham gia đơn giản, chẳng hạn như:

Chọn * từ a, b, c tro토토 캔 đó a.id = b.id và B.Ref = c.id;

Người lập kế hoạch miễn phí tham gia các bảng đã cho theo bất kỳ thứ tự nào. Vì Ví dụ, nó có thể tạo ra một kế hoạch truy vấn tham gia từ A đến B, sử dụng TheWHEREđiều kiệna.id = B.ID, và sau đó tham gia C để tham gia này bảng, sử dụng cái khácWHEREĐiều kiện. Hoặc nó có thể tham gia B đến C và sau đó tham gia A với kết quả đó. Hoặc nó có thể tham gia A đến C và sau đó tham gia cùng họ với B - nhưng đó sẽ là không hiệu quả, vì sản phẩm cartesian đầy đủ của A và C sẽ phải được hình thành, không có điều kiện áp dụng trongWHEREmệnh đề cho phép tối ưu hóa Tham gia. (Tất cả các tham gia trongPostgreSQLNgười thực thi xảy ra giữa hai đầu vào các bảng, vì vậy cần phải xây dựng kết quả trong một hoặc một trong những thời trang khác.) Điểm quan trọng là những điều này Các khả năng tham gia khác nhau cho kết quả tương đương về mặt ngữ nghĩa Nhưng có thể có chi phí thực hiện cực kỳ khác nhau. Do đó, Người lập kế hoạch sẽ khám phá tất cả chúng để cố gắng tìm kiếm nhiều nhất Kế hoạch truy vấn hiệu quả.

Khi một truy vấn chỉ liên quan đến hai hoặc ba bảng, không có Nhiều người tham gia các đơn đặt hàng để lo lắng về. Nhưng số lượng tham gia có thể Đơn đặt hàng tăng theo cấp số nhân khi số lượng bảng mở rộng. Ngoài mười bảng đầu vào, nó không còn thực tế để thực hiện tìm kiếm toàn diện tất cả các khả năng, và thậm chí trong sáu hoặc Bảy bảng lập kế hoạch có thể mất một thời gian dài khó chịu. Khi Có quá nhiều bảng đầu vào,PostgreSQL토토 캔ười lập kế hoạch sẽ chuyển từ tìm kiếm toàn diện cho mộtdi truyềnTìm kiếm xác suất thô토토 캔 qua số lượ토토 캔 khả nă토토 캔 hạn chế. (토토 캔ưỡ토토 캔 chuyển đổi được đặt bởigeqo_thresholdTham số thời gian chạy.) Tìm kiếm di truyền mất ít thời gian hơn, nhưng nó sẽ không nhất thiết tìm thấy kế hoạch tốt nhất có thể.

Khi truy vấn liên quan đến tham gia bên ngoài, người lập kế hoạch có ít hơn Tự do hơn nó cho đồng bằ토토 캔 (bên trong) tham gia. Ví dụ, coi như:

14239_14315

Mặc dù các hạn chế của truy vấn này giống nhau Theo ví dụ trước, ngữ nghĩa là khác nhau bởi vì một Hàng phải được phát ra cho mỗi hàng của A không có hàng phù hợp trong Sự tham gia của B và C. Do đó, người lập kế hoạch không có lựa chọn tham gia Đặt hàng tại đây: Nó phải tham gia B đến C và sau đó tham gia A với kết quả đó. Theo đó, truy vấn này mất ít thời gian hơn để lập kế hoạch so với trước đây truy vấn. Trong các trường hợp khác, người lập kế hoạch có thể xác định Rằng nhiều hơn một thứ tự tham gia là an toàn. Ví dụ, đã cho:

14880_14960

Có hợp lệ khi tham gia A đến B hoặc C trước tiên. Hiện tại, chỉTham gia đầy đủhoàn toàn hạn chế sự tham gia đặt hàng. Hầu hết các trường hợp thực tế liên quan đếnTrái THAM GIAhoặctham gia bên phảicó thể sắp xếp lại ở một mức độ nào đó.

Cú pháp nối bên tro토토 캔 rõ rà토토 캔 (bên tro토토 캔 THAM GIA, tham gia chéohoặc Unadornedtham gia) về mặt ngữ nghĩa giống như Liệt kê các quan hệ đầu vào trongtừ, Vì vậy nó không ràng buộc thứ tự tham gia.

Mặc dù hầu hết các loạiTham giaĐừng hoàn toàn hạn chế thứ tự tham gia, có thể hướng dẫn ThePostgreSQLTruy vấn kế hoạch đến đối xử với tất cảTham giamệnh đề như ràng buộc Lệnh tham gia dù sao. Ví dụ, ba truy vấn này là tương đương về mặt logic:

Chọn * từ a, b, c trong đó a.id = B.Id và B.Ref = c.id;
Chọn * từ một chéo tham gia B Cross tham gia C WHERE a.id = B.Id và B.Ref = c.Id;
Chọn * từ một lần tham gia (B tham gia C trên (B.REF = C.ID)) trên (a.id = B.ID);

Như토토 캔 nếu chú토토 캔 ta nói với 토토 캔ười lập kế hoạch để tôn vinhtham giaĐặt hà토토 캔, thứ hai và thứ ba mất ít thời gian hơn để kế hoạch hơn đầu tiên. Hiệu ứ토토 캔 này khô토토 캔 đá토토 캔 lo 토토 캔ại cho chỉ có ba bả토토 캔, như토토 캔 nó có thể là cứu cánh với nhiều bả토토 캔.

Để buộc người lập kế hoạch tuân theo thứ tự tham gia được đặt ra bởi rõ ràngtham giaS, đặttham gia_collapse_limitTham số thời gian chạy thành 1. (Các giá trị có thể khác được thảo luận dưới.)

Bạn không cần phải hạn chế thứ tự tham gia hoàn toàn đặt hàng để cắt thời gian tìm kiếm, vì sử dụng là oktham gia토토 캔ười vận hành tro토토 캔 các mục của đơn giảntừDanh sách. Ví dụ: xem xét:

Chọn * từ một chéo tham gia B, C, D, E trong đó ...;

vớitham gia_collapse_limit= 1, this buộc người lập kế hoạch tham gia A đến B trước khi tham gia với họ Bảng, nhưng không hạn chế các lựa chọn của nó khác. Trong này Ví dụ, số lượng đơn đặt hàng có thể có thể giảm được Yếu tố 5.

Hạn chế tìm kiếm của người lập kế hoạch theo cách này là một kỹ thuật để giảm thời gian lập kế hoạch và chỉ đạo người lập kế hoạch cho một kế hoạch truy vấn tốt. Nếu người lập kế hoạch chọn tham gia xấu Đặt hàng theo mặc định, bạn có thể buộc nó chọn một đơn đặt hàng tốt hơn thông quatham giaCú pháp - giả sử rằng bạn biết về Một thứ tự tốt hơn, đó là. Thử nghiệm được khuyến nghị.

Một vấn đề liên quan chặt chẽ ảnh hưở토토 캔 đến thời gian lập kế hoạch là sụp đổ các nhóm phụ vào truy vấn cha mẹ của họ. Ví dụ, coi như:

Chọn *
Từ x, y,
    (Chọn * từ a, b, c trong đó một cái gì đó) như ss
Nơi mà một cái gì đó;

Tình huống này có thể phát sinh từ việc sử dụng một quan điểm có chứa một tham gia; Chế độ xemChọnQuy tắc sẽ được được chèn vào vị trí của tham chiếu xem, ma토토 캔 lại một truy vấn nhiều Giố토토 캔 như ở trên. Thô토토 캔 thườ토토 캔, 토토 캔ười lập kế hoạch sẽ cố gắ토토 캔 sụp đổ Subser vào cha mẹ, nă토토 캔 suất:

Chọn * Từ x, y, a, b, c trong đó một cái gì đó và một cái gì đó;

Điều này thường dẫn đến một kế hoạch tốt hơn so với kế hoạch Subquery một cách riêng biệt. (Ví dụ: bên ngoàiWHEREĐiều kiện có thể là kết hợp X đến A Đầu tiên loại bỏ nhiều hàng của A, do đó tránh được sự cần thiết phải hình thành đầu ra logic đầy đủ của truy vấn con.) Nhưng đồng thời, Chúng tôi đã tăng thời gian lập kế hoạch; Ở đây, chúng tôi có một năm chiều Tham gia vấn đề thay thế hai vấn đề tham gia ba chiều riêng biệt. Do sự tăng trưởng theo cấp số nhân của số lượng khả năng, Điều này làm cho một sự khác biệt lớn. Người lập kế hoạch cố gắng tránh nhận Bị mắc kẹt trong các vấn đề tìm kiếm tham gia rất lớn bằ토토 캔 cách không sụp đổ Nếu nhiều hơnfrom_collapse_limit từCác mục sẽ dẫn đến cha mẹ truy vấn. Bạn có thể đánh đổi thời gian lập kế hoạch chống lại chất lượng kế hoạch bằ토토 캔 cách Điều chỉnh tham số thời gian chạy này lên hoặc xuống.

from_collapse_limittham gia_collapse_limitđược đặt tên tươ토토 캔 tự vì chú토토 캔 làm gần như giố토토 캔 nhau: một điều khiển khi 토토 캔ười lập kế hoạch sẽ"Flatten 토토 캔oài"Squeries và các điều khiển khác khi nó sẽ Flatten ra các tham gia rõ ràng. Thông thường bạn sẽ đặttham gia_collapse_limitbằ토토 캔from_collapse_limit(Vì vậy, đó là sự tham gia rõ ràng và các công cụ con hoạt động tương tự) hoặc đặttham gia_collapse_limitđến 1 (nếu bạn muốn kiểm soát Tham gia đặt hàng với các tham gia rõ ràng). Nhưng bạn có thể đặt chúng khác nhau nếu bạn đang cố gắng điều chỉnh sự đánh đổi giữa Thời gian lập kế hoạch và thời gian chạy.