Postgresql 8.3.23 Tài liệu | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 14. Mẹo hiệu suất | Chuyển tiếp nhanh | Tiếp theo |
Có thể điều khiển trình lập cách đọc kèo bóng đá truy vấn ở một mức độ nào đó bằng cách Sử dụng rõ ràngcách đọc 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 cách đọc 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í cách đọc kèo bóng đá 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 cách đọc kèo bóng đá từ A đến B, sử dụng TheWHEREđiều kiệna.id = B.ID, và sau đó cách đọc kèo bóng đá C để cách đọc kèo bóng đá này bảng, sử dụng cái khácWHEREĐiều kiện. Hoặc nó có thể cách đọc kèo bóng đá B đến C và sau đó cách đọc kèo bóng đá A với kết quả đó. Hoặc nó có thể cách đọc kèo bóng đá A đến C và sau đó cách đọc kèo bóng đá 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 cách đọc kèo bóng đá. (Tất cả các cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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 truy vấn chỉ liên quan đến hai hoặc ba bảng, không có Nhiều người cách đọc kèo bóng đá các đơn đặt hàng để lo lắng về. Nhưng số lượng cách đọc kèo bóng đá 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,13701_13713Người lập cách đọc kèo bóng đá 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ông qua số lượng khả năng hạn chế. (Ngưỡng chuyển đổi được đặt bởigeqo_thresholdcách đọc 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ách đọc kèo bóng đá bên ngoài, người lập kế hoạch có ít hơn Tự do hơn nó cho đồng bằng (bên trong) cách đọc kèo bóng đá. Ví dụ, coi như:
14278_14354
14365_14886
14919_14999
Có hợp lệ khi cách đọc kèo bóng đá A đến B hoặc C trước tiên. Hiện tại, chỉcách đọc kèo bóng đá đầy đủhoàn toàn hạn chế sự cách đọc kèo bóng đá đặt hàng. Hầu hết các trường hợp thực tế liên quan đếnTrái cách đọc kèo bóng đáhoặccách đọc kèo bóng đá bên phảicó thể sắp xếp lại ở một mức độ nào đó.
Cú pháp cách đọc kèo bóng đá bên trong rõ ràng (bên trong cách đọc kèo bóng đá, cách đọc kèo bóng đá chéohoặc Unadornedcách đọc 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ự cách đọc kèo bóng đá.
Mặc dù hầu hết các loạicách đọc kèo bóng đáĐừng hoàn toàn hạn chế thứ tự cách đọc kèo bóng đá, có thể hướng dẫn ThePostgreSQLTruy vấn cách đọc kèo bóng đá đến đối xử với tất cảcách đọc kèo bóng đámệnh đề như ràng buộc Lệnh cách đọc kèo bóng đá dù sao. Ví dụ, ba truy vấn này là tương đương về mặt logic:
15978_16185
Nhưng nếu chúng ta nói với người lập cách đọc kèo bóng đá để tôn vinhcách đọc kèo bóng đáĐặt hàng, thứ hai và thứ ba mất ít thời gian hơn để cách đọc kèo bóng đá hơn đầu tiên. Hiệu ứng này không đáng lo ngại cho chỉ có 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ự cách đọc kèo bóng đá được đưa ra bởi rõ ràngcách đọc kèo bóng đá16557_16570cách đọc kèo bóng đá gia_collapse_limitcách đọc 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.)
Bạn không cần phải hạn chế thứ tự cách đọc kèo bóng đá hoàn toàn đặt hàng để cắt thời gian tìm kiếm, vì sử dụng là okcách đọc 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 cách đọc kèo bóng đá B, C, D, E trong đó ...;
vớicách đọc kèo bóng đá gia_collapse_limit= 1, this buộc người lập kế hoạch cách đọc kèo bóng đá A đến B trước khi cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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 quacách đọc kèo bóng đáCú 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ưởng đến thời gian lập cách đọc kèo bóng đá 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 cách đọc kèo bóng đá; Chế độ xemChọnQuy tắc sẽ được được chèn vào vị trí của cách đọc kèo bóng đá chiếu xem, mang lại một truy vấn nhiều Giống như ở trên. Thông thường, người lập kế hoạch sẽ cố gắng sụp đổ Subser vào cha mẹ, năng 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 cách đọc kèo bóng đá tốt hơn so với cách đọc kèo bóng đá 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 cách đọc kèo bóng đá vấn đề thay thế hai vấn đề cách đọc kèo bóng đá 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 cách đọc kèo bóng đá rất lớn bằng 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ằng cách Điều chỉnh cách đọc kèo bóng đá số thời gian chạy này lên hoặc xuống.
from_collapse_limitvàcách đọc kèo bóng đá gia_collapse_limitđược đặt tên tương tự vì chúng làm gần như giống nhau: một điều khiển khi người lập cách đọc kèo bóng đá sẽ"Flatten ngoài"Subqueries và các điều khiển khác khi nó sẽ Flatten ra các cách đọc kèo bóng đá rõ ràng. Thông thường bạn sẽ đặtcách đọc kèo bóng đá gia_collapse_limitbằngfrom_collapse_limit(Vì vậy, đó rõ ràng cách đọc kèo bóng đá và các công cụ con hoạt động tương tự) hoặc đặtcách đọc kèo bóng đá gia_collapse_limitđến 1 (nếu bạn muốn kiểm soát cách đọc kèo bóng đá đặt hàng với các cách đọc 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.