Postgresql 9.3.25 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 14. Mẹo hiệu suất | NEXT |
Có thể điều khiển trình lập kế hoạch truy vấn ở một mức độ nào đó bằng cách Sử dụng rõ ràngkèo tỷ số bóng đá euro hôm nayCú 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 tỷ số bóng đá euro hôm nay đơ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 tỷ số bóng đá euro hôm nay 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 kèo tỷ số bóng đá euro hôm nay từ A đến B, sử dụng TheWHEREđiều kiệna.id = B.ID, và sau đó kèo tỷ số bóng đá euro hôm nay C với bảng kèo tỷ số bóng đá euro hôm nay này, sử dụng cái khácWHEREĐiều kiện. Hoặc nó Có thể kèo tỷ số bóng đá euro hôm nay B đến C và sau đó kèo tỷ số bóng đá euro hôm nay A đến kết quả đó. Hoặc nó có thể kèo tỷ số bóng đá euro hôm nay A đến C và sau đó kèo tỷ số bóng đá euro hôm nay cùng họ với B - nhưng điều đó sẽ không hiệu quả, Vì sản phẩm Full Cartesian 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 sự kèo tỷ số bóng đá euro hôm nay. (Tất cả kèo tỷ số bóng đá euro hôm nay trongPostgreSQLNgười thực thi xảy ra giữa hai bảng đầu vào, vì vậy cần phải xây dựng dẫn đến một hoặc một trong những thời trang này.) Điểm quan trọng là rằng những khả năng kèo tỷ số bóng đá euro hôm nay khác nhau này cung cấp về mặt ngữ nghĩa Kết quả tương đương 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.
13046_13462PostgreSQLNgười lập kế hoạch sẽ chuyển từ tìm kiếm toàn diện sang Adi truyền13585_13693geqo_thresholdkèo tỷ số bóng đá euro hôm nay 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 tỷ số bóng đá euro hôm nay 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) kèo tỷ số bóng đá euro hôm nay. Ví dụ, coi như:
14043_14118
Mặc dù các hạn chế của truy vấn này rất giống 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 kèo tỷ số bóng đá euro hôm nay của B và C. Do đó, người lập kế hoạch không có lựa chọn đặt hàng kèo tỷ số bóng đá euro hôm nay Dưới đây: Nó phải kèo tỷ số bóng đá euro hôm nay B đến C và sau đó kèo tỷ số bóng đá euro hôm nay 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ự kèo tỷ số bóng đá euro hôm nay là an toàn. Ví dụ, đã cho:
14664_14743
Có hợp lệ khi kèo tỷ số bóng đá euro hôm nay A đến B hoặc C trước tiên. Hiện tại, chỉkèo tỷ số bóng đá euro hôm nay đầy đủhoàn toàn hạn chế sự kèo tỷ số bóng đá euro hôm nay đặt hàng. Hầu hết các trường hợp thực tế liên quan đếnTrái kèo tỷ số bóng đá euro hôm nayhoặckèo tỷ số bóng đá euro hôm nay bên phải14990_15026
Cú pháp nối bên trong rõ ràng (kèo tỷ số bóng đá euro hôm nay bên trong, kèo tỷ số bóng đá euro hôm nay chéohoặc Unadornedkèo tỷ số bóng đá euro hôm nay) về mặt ngữ nghĩa giống như liệt kê đầu vào quan hệ trongtừ, vì vậy nó không ràng buộc thứ tự kèo tỷ số bóng đá euro hôm nay.
Mặc dù hầu hết các loạikèo tỷ số bóng đá euro hôm nayĐừng hoàn toàn hạn chế thứ tự kèo tỷ số bóng đá euro hôm nay, có thể hướng dẫnPostgreSQLTruy vấn kế hoạch để điều trị tất cảkèo tỷ số bóng đá euro hôm naymệnh đề như ràng buộc kèo tỷ số bóng đá euro hôm nay đơn đặt hàng dù sao. Ví dụ, ba truy vấn này là logic tương đương:
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 tỷ số bóng đá euro hôm nay B Cross kèo tỷ số bóng đá euro hôm nay C WHERE a.id = B.Id và B.Ref = c.Id; Chọn * từ một lần kèo tỷ số bóng đá euro hôm nay (B kèo tỷ số bóng đá euro hôm nay 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 lập kế hoạch để tôn vinhkèo tỷ số bóng đá euro hôm nayĐặt hàng, thứ hai và thứ ba mất ít thời gian hơn để kế hoạch 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ự kèo tỷ số bóng đá euro hôm nay được đặt ra bởi rõ ràngkèo tỷ số bóng đá euro hôm nayS, đặtkèo tỷ số bóng đá euro hôm nay gia_collapse_limitkèo tỷ số bóng đá euro hôm nay 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 ràng buộc hoàn toàn thứ tự kèo tỷ số bóng đá euro hôm nay theo thứ tự Để cắt thời gian tìm kiếm, vì sử dụng là okkèo tỷ số bóng đá euro hôm nayNgườ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 tỷ số bóng đá euro hôm nay b, c, d, e trong đó ...;
vớikèo tỷ số bóng đá euro hôm nay gia_collapse_limit16793_17002
Ràng buộc 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 kèo tỷ số bóng đá euro hôm nay 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 quakèo tỷ số bóng đá euro hôm nayCú 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 kế hoạch đang sụp đổ của các nhóm phụ vào truy vấn cha mẹ của họ. Ví dụ: xem xét:
17546_17638
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 kèo tỷ số bóng đá euro hôm nay; Chế độ xemChọnQuy tắc sẽ được được chèn vào vị trí của kèo tỷ số bóng đá euro hôm nay 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 sụp đổ 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 kế hoạch tốt hơn so với kế hoạch con riêng. (Ví dụ: bên ngoàiWHERECác điều kiện có thể là kết hợp X để loại bỏ đầu tiên các hàng của a, do đó tránh 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 vấn đề kèo tỷ số bóng đá euro hôm nay năm chiều thay thế hai Các vấn đề kèo tỷ số bóng đá euro hôm nay ba chiều riêng biệt. Do sự tăng trưởng theo cấp số nhân Trong số các khả năng, điều này tạo ra một sự khác biệt lớn. Các 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 tỷ số bóng đá euro hôm nay rất lớn bằng cách không sụp đổ một 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 kế hoạch Thời gian chống lại chất lượng kế hoạch bằng cách điều chỉnh kèo tỷ số bóng đá euro hôm nay số thời gian chạy này lên hoặc xuống.
from_collapse_limitvàkèo tỷ số bóng đá euro hôm nay 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 kế hoạch sẽ"Flatten ngoài"Subqueries và các điều khiển khác khi nó sẽ làm phẳng ra ngoài kèo tỷ số bóng đá euro hôm nay rõ ràng. Thông thường bạn sẽ đặtkèo tỷ số bóng đá euro hôm nay gia_collapse_limitbằngfrom_collapse_limit(Vì vậy, đó là kèo tỷ số bóng đá euro hôm nay và các công cụ con hoạt động tương tự) hoặc đặtkèo tỷ số bóng đá euro hôm nay gia_collapse_limitđến 1 (nếu bạn muốn kiểm soát kèo tỷ số bóng đá euro hôm nay đặt hàng với các kèo tỷ số bóng đá euro hôm nay 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.