Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
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ùng một trang chohiện tạiPhiên bản hoặc một trong 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 người kèo bóng đá c1 kế hoạch với rõ ràngkèo bóng đá c1mệnh đề#

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

Trong một truy vấn kèo bóng đá c1 đơn giản, chẳng hạn như:

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

Người lập kế hoạch miễn phí kèo bóng đá c1 các bảng đã cho theo bất kỳ thứ tự nào. Ví dụ: nó có thể tạo một kế hoạch truy vấn kèo bóng đá c1 A đến B, sử dụngWHEREđiều kiệna.id = B.ID, và sau đó kèo bóng đá c1 C với bảng đã kèo bóng đá c1 này, sử dụng cái kiaWHEREĐiều kiện. Hoặc nó có thể kèo bóng đá c1 B đến C và sau đó kèo bóng đá c1 A với kết quả đó. Hoặc nó có thể kèo bóng đá c1 A đến C và sau đó kèo bóng đá c1 với B - nhưng điều đó sẽ 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 nào trongở đâumệnh đề cho phép tối ưu hóa sự kèo bóng đá c1. (Tất cả các kèo bóng đá c1 trongPostgreSQLNgười thực thi xảy ra giữa hai bảng đầu vào, do đó, cần phải xây dựng kết quả trong một hoặc một trong những thời trang này.) Điểm quan trọng là các khả năng kèo bóng đá c1 khác nhau này 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 kế hoạch truy vấn hiệu quả nhất.

Khi một truy vấn chỉ liên quan đến hai hoặc ba bảng, không có nhiều lệnh kèo bóng đá c1 để lo lắng. Nhưng số lượng đơn đặt hàng có thể 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, không còn thực tế để 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,PostgreSQLNgười kèo bóng đá c1 kế hoạch sẽ chuyển từ tìm kiếm toàn diện sang Adi truyềnTìm kiếm xác suất thông qua số lượng khả năng hạn chế. (Ngưỡng chuyển đổi được đặt bởigeqo_thresholdkèo bóng đá c1 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 kèo bóng đá c1 bên ngoài, người lập kế hoạch có ít tự do hơn so với các kèo bóng đá c1 đơn giản (bên trong). Ví dụ: xem xét:

14610_14686

14696_15203

15236_15316

Có hợp lệ khi kèo bóng đá c1 A đến B hoặc C trước tiên. Hiện tại, chỉkèo bóng đá c1 đầy đủhoàn toàn hạn chế thứ tự kèo bóng đá c1. Hầu hết các trường hợp thực tế liên quan đếnkèo bóng đá c1 tráihoặckèo bóng đá c1 bên phảiCó thể được sắp xếp lại ở một mức độ nào đó.

Cú pháp nối bên trong rõ ràng (kèo bóng đá c1 bên trong, kèo bóng đá c1 chéohoặc Unadornedkèo bóng đá c1) 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ự kèo bóng đá c1.

Mặc dù hầu hết các loạikèo bóng đá c1Không hoàn toàn hạn chế thứ tự kèo bóng đá c1, có thể hướng dẫnPostgreSQLTruy vấn kèo bóng đá c1 để xử lý tất cảkèo bóng đá c1Điều khoản như ràng buộc thứ tự kèo bóng đá c1. Ví dụ: ba truy vấn này 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 kèo bóng đá c1 B Cross kèo bóng đá c1 C WHERE a.id = B.Id và B.Ref = c.Id;
Chọn * từ một lần kèo bóng đá c1 (B kèo bóng đá c1 C trên (B.REF = C.ID)) trên (a.id = B.ID);

Nhưng nếu chúng ta nói với người kèo bóng đá c1 kế hoạch để tôn vinhkèo bóng đá c116592_16768

16776_16845kèo bóng đá c1S, đặtkèo bóng đá c1 gia_collapse_limitkèo bóng đá c1 số thời gian chạy thành 1. (Các giá trị có thể khác được thảo luận dưới đây.)

Bạn không cần phải hạn chế thứ tự kèo bóng đá c1 hoàn toàn để cắt giảm thời gian tìm kiếm, vì bạn có thể sử dụngkèo bóng đá c1Người vận hành trong các mục của đơn giảntừDanh sách. Ví dụ: xem xét:

Chọn * từ một chéo kèo bóng đá c1 b, c, d, e trong đó ...;

vớikèo bóng đá c1 gia_collapse_limit17450_17659

17667_17919kèo bóng đá c1Cú pháp - Giả sử rằng bạn biết 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ưởng đến thời gian kèo bóng đá c1 kế hoạch đang sụp đổ các nhóm phụ vào truy vấn cha mẹ của họ. Ví dụ: xem xét:

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 sự kèo bóng đá c1; Chế độ xemChọnQuy tắc sẽ được chèn thay cho kèo bóng đá c1 chiếu xem, mang lại một truy vấn giống như ở trên. Thông thường, người lập kế hoạch sẽ cố gắng thu gọn trình điều khiển con vào cha mẹ, mang lại:

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èo bóng đá c1 kế hoạch riêng biệt. (Ví dụ: bên ngoàiWHERECác điều kiện có thể sao cho việc nối X đến lần đầ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 phụ.) 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 vấn đề kèo bóng đá c1 năm chiều thay thế hai vấn đề kèo bóng đá c1 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 tạo ra sự khác biệt lớn. Người lập kế hoạch cố gắng tránh bị mắc kẹt trong các vấn đề tìm kiếm kèo bóng đá c1 khổng lồ bằng cách không sụp đổ một trình truy vấn con nếu nhiều hơnfrom_collapse_limit từCác mục sẽ dẫn đến truy vấn cha mẹ. 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ằng cách điều chỉnh kèo bóng đá c1 số thời gian chạy này lên hoặc xuống.

from_collapse_limitkèo bóng đá c1 gia_collapse_limitđược đặt tên tương tự vì chúng làm gần như điều tương tự: một điều khiển khi người kèo bóng đá c1 kế hoạch sẽHồiFlatten OutHồiSubqueries và các điều khiển khác khi nó sẽ làm phẳng các kèo bóng đá c1 rõ ràng. Thông thường bạn sẽ đặtkèo bóng đá c1 gia_collapse_limitbằngfrom_collapse_limit20166_20230kèo bóng đá c1 gia_collapse_limitđến 1 (nếu bạn muốn kiểm soát thứ tự kèo bóng đá c1 với các kèo bóng đá c1 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.