Phiên bản được hỗ trợ:hiện tại(17)16/15/14/13
Phiên bản phát triển: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 lập tỷ lệ kèo bóng đá với rõ ràngtỷ lệ kèo bóng đámệnh đề

Có thể điều khiển trình lập tỷ lệ kèo bóng đá truy vấn ở một mức độ nào đó bằng cách sử dụng rõ ràngtỷ lệ kèo bóng đáCú 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 tỷ lệ kèo bóng đá đơ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í tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đá A đến B, sử dụngWHEREđiều kiệna.id = B.ID, và sau đó tỷ lệ kèo bóng đá C với bảng đã tỷ lệ kèo bóng đá này, sử dụng cái kiaWHEREĐiều kiện. Hoặc nó có thể tỷ lệ kèo bóng đá B đến C và sau đó tỷ lệ kèo bóng đá A với kết quả đó.WHEREmệnh đề cho phép tối ưu hóa sự tỷ lệ kèo bóng đá. (Tất cả các tỷ lệ kèo bóng đá trongPostgreSQL12954_13320

Khi một truy vấn chỉ liên quan đến hai hoặc ba bảng, không có nhiều lệnh tỷ lệ kèo bóng đá để 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.POSTGRESQLNgười lập tỷ lệ kèo bóng đá 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_thresholdtỷ lệ kèo bóng đá 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 các tỷ lệ kèo bóng đá bên ngoài, người lập kế hoạch có ít tự do hơn so với các tỷ lệ kèo bóng đá đơn giản (bên trong). Ví dụ: xem xét:

14342_14418

Mặc dù các hạn chế của truy vấn này tương tự bề ngoài với ví dụ trước đó, ngữ nghĩa là khác nhau 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 tỷ lệ kèo bóng đá B và C. Do đó, người lập kế hoạch không có sự lựa chọn nào về thứ tự tỷ lệ kèo bóng đá ở đây: nó phải tỷ lệ kèo bóng đá B với C và sau đó tỷ lệ kèo bóng đá 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 truy vấn trước đó.

14968_15048

Có hợp lệ khi tỷ lệ kèo bóng đá A đến B hoặc C trước tiên. Hiện tại, chỉtỷ lệ kèo bóng đá đầy đủhoàn toàn hạn chế thứ tự tỷ lệ kèo bóng đá. Hầu hết các trường hợp thực tế liên quan đếntỷ lệ kèo bóng đá tráihoặctỷ lệ kèo bóng đá 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 (tỷ lệ kèo bóng đá bên trong,tỷ lệ kèo bóng đá chéohoặc Unadornedtỷ lệ kèo bóng đá) 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ự tỷ lệ kèo bóng đá.

Mặc dù hầu hết các loạitỷ lệ kèo bóng đáKhông hoàn toàn hạn chế thứ tự tỷ lệ kèo bóng đá, có thể hướng dẫnPostgreSQLTruy vấn tỷ lệ kèo bóng đá để điều trị tất cảtỷ lệ kèo bóng đáCác điều khoản như ràng buộc thứ tự tỷ lệ kèo bóng đá. 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;

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

Để buộc người lập kế hoạch tuân theo thứ tự tỷ lệ kèo bóng đá được trình bày bằng cách rõ ràngtỷ lệ kèo bóng đáS, đặttỷ lệ kèo bóng đá gia_collapse_limittỷ lệ kèo bóng đá 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ự tỷ lệ kèo bóng đá hoàn toàn để cắt thời gian tìm kiếm, vì bạn có thể sử dụngtỷ lệ kèo bóng đáNgườ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 tỷ lệ kèo bóng đá B, C, D, E trong đó ...;

vớitỷ lệ kèo bóng đá gia_collapse_limit= 1, điều này buộc người lập kế hoạch tỷ lệ kèo bóng đá A đến B trước khi tỷ lệ kèo bóng đá chúng với các bảng khác, nhưng không hạn chế các lựa chọn của nó. Trong ví dụ này, số lượng đơn đặt hàng có thể giảm được giảm theo hệ số 5.

Kiềm 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 hữu ích để giảm thời gian lập kế hoạch và hướng người lập kế hoạch đến một kế hoạch truy vấn tốt. Nếu người lập kế hoạch chọn thứ tự tỷ lệ kèo bóng đá xấu theo mặc định, bạn có thể buộc nó chọn một thứ tự tốt hơn thông quatỷ lệ kèo bóng đáCú 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 lập tỷ lệ kèo bóng đá đ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ì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ự tỷ lệ kèo bóng đá; Chế độ xemChọnQuy tắc sẽ được chèn thay cho tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đá tốt hơn so với lập tỷ lệ kèo bóng đá 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 đề tỷ lệ kèo bóng đá năm chiều thay thế hai vấn đề tỷ lệ kèo bóng đá ba chiều riêng biệt.from_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 tỷ lệ kèo bóng đá số thời gian chạy này lên hoặc xuống.

from_collapse_limittỷ lệ kèo bóng đá 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 lập tỷ lệ kèo bóng đá sẽHồiFlatten OutHồiCác nhóm phụ và các điều khiển khác khi nó sẽ làm phẳng các kết nối rõ ràng. Thông thường bạn sẽ đặttỷ lệ kèo bóng đá gia_collapse_limitbằngfrom_collapse_limit19898_19962tỷ lệ kèo bóng đá gia_collapse_limitđến 1 (nếu bạn muốn kiểm soát thứ tự tỷ lệ kèo bóng đá với các tỷ lệ kèo bóng đá 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.