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 / 5255_5262
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
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 kèo bóng đá hôm nay và ngày mai phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

14.3. Tối ưu kèo bóng đá hôm nay và ngày mai nhà điều hành Thông tin

tác giả:Được viết bởi Tom Lane.

APostgreSQLkèo bóng đá hôm nay và ngày mai tử định nghĩa có thể bao gồm một số điều khoản tùy chọn cho biết Hệ thống những điều hữu ích về cách các nhà điều hành hành xử. Những cái này các điều khoản nên được cung cấp bất cứ khi nào thích hợp, bởi vì chúng có thể tạo ra các tốc độ tăng tốc đáng kể trong việc thực hiện các truy vấn sử dụng người vận hành. Nhưng nếu bạn cung cấp chúng, bạn phải chắc chắn rằng họ là đúng! Việc sử dụng không chính xác một mệnh đề tối ưu hóa có thể dẫn đến phụ trợ sụp đổ, đầu ra sai một cách tinh tế hoặc những điều xấu khác. Bạn luôn có thể bỏ ra một điều khoản tối ưu hóa nếu bạn không chắc chắn về nó; Hậu quả duy nhất là các truy vấn có thể chạy chậm hơn hơn họ cần.

Các điều khoản tối ưu kèo bóng đá hôm nay và ngày mai bổ sung có thể được thêm vào trong tương lai phiên bản củaPostgreSQL. Những người Được mô tả ở đây là tất cả những cái phát hành 7.2.8 Hiểu.

14.3.1. Người giao dịch

TheCổ lkèo bóng đá hôm nay và ngày maimệnh đề, nếu được cung cấp, Đặt tên cho một kèo bóng đá hôm nay và ngày mai tử là người đăng ký của người vận hành xác định. Chúng tôi nói rằng nhà điều hành A là người đăng ký của nhà điều hành B if (x a y) bằng (y b x) cho tất cả các giá trị đầu vào có thể x, y. Lưu ý rằng B cũng là người giao dịch của A. ví dụ, người vận hành<Đối với một loại dữ liệu cụ thể thường là mỗi Người giao cổ và nhà điều hành của những người khác+IS thường làm việc với chính nó. Nhưng kèo bóng đá hôm nay và ngày mai tử-thường không giao hoán với bất cứ điều gì.

12767_12946PostgreSQLCần được đưa ra để tra cứu Người giao dịch, và đó là tất cả những gì cần được cung cấp trongCổ lkèo bóng đá hôm nay và ngày maimệnh đề.

13150_13451

  • Một cách là bỏ quaCổ lkèo bóng đá hôm nay và ngày maimệnh đề trong kèo bóng đá hôm nay và ngày mai tử đầu tiên mà bạn xác định, và sau đó cung cấp một trong nhà điều hành thứ hai sự định nghĩa. TừPostgreSQLbiết rằng việc giao lại kèo bóng đá hôm nay và ngày mai nhà khai thác đi theo cặp, khi nó nhìn thấy định nghĩa thứ hai nó sẽ tự động quay lại và điền vào thiếuCổ lkèo bóng đá hôm nay và ngày maimệnh đề trong lần đầu tiên sự định nghĩa.

  • Cách khác, đơn giản hơn chỉ là bao gồmCổ lkèo bóng đá hôm nay và ngày maimệnh đề trong cả hai định nghĩa. KhiPostgreSQLxử lý đầu tiên định nghĩa và nhận ra rằngCổ lkèo bóng đá hôm nay và ngày mai14304_14593PostgreSQL14634_15070PostgreSQLphiên bản trước 6.5, nhưng nó bây giờ là cách được khuyến nghị để làm mọi việc.)

14.3.2. Người phủ định

TheNEGATORmệnh đề, nếu được cung cấp, Đặt tên cho một kèo bóng đá hôm nay và ngày mai tử là người tiêu cực của người vận hành xác định. Chúng tôi nói rằng kèo bóng đá hôm nay và ngày mai tử A là công cụ tiêu cực của kèo bóng đá hôm nay và ngày mai tử B nếu Cả hai kết quả boolean trở lại và (x a y) bằng không (x b y) cho Tất cả các đầu vào có thể x, y. Lưu ý rằng B cũng là người tiêu cực của A. Ví dụ,< =là một cặp tiêu cực cho hầu hết các loại dữ liệu. MỘT kèo bóng đá hôm nay và ngày mai tử không bao giờ có thể là người tiêu cực của chính nó.

15869_16073

Người phủ định của người vận hành phải có cùng trái và/hoặc phải Các loại kèo bóng đá hôm nay và ngày mai hạng là chính kèo bóng đá hôm nay và ngày mai tử, vì vậy cũng giống như vớiCổ lkèo bóng đá hôm nay và ngày mai, Chỉ có tên kèo bóng đá hôm nay và ngày mai tử cần được đưa ra trongtiêu cựcmệnh đề.

Cung cấp trình phủ định là rất hữu ích cho Trình tối ưu kèo bóng đá hôm nay và ngày mai truy vấn Vì nó cho phép các biểu thức như không (x = y) được đơn giản kèo bóng đá hôm nay và ngày mai thành x < y. Điều này xuất hiện thường xuyên hơn bạn có thể Hãy suy nghĩ, bởi vì không có thể được chèn vào hậu quả của sắp xếp lại.

Các cặp kèo bóng đá hôm nay và ngày mai tử tiêu cực có thể được xác định bằng cách sử dụng cùng một Các phương thức được giải thích ở trên cho các cặp giao dịch.

14.3.3. HẠN CHẾ

TheHạn chếmệnh đề, nếu được cung cấp, Đặt tên cho chức năng ước tính chọn lọc hạn chế cho kèo bóng đá hôm nay và ngày mai tử (lưu ý rằng đây là tên hàm, không phải là người vận hành tên).Hạn chếĐiều khoản chỉ thực hiện cảm giác cho các kèo bóng đá hôm nay và ngày mai tử nhị phân trả vềBoolean17197_17325WHERE-Chlause điều kiện của biểu mẫu

Cột op hằng số

Đối với kèo bóng đá hôm nay và ngày mai tử hiện tại và một giá trị hằng số cụ thể. Điều này hỗ trợ trình tối ưu hóa bằng cách cho nó một số ý tưởng về bao nhiêu Hàng sẽ bị loại bởiWHEREkèo bóng đá hôm nay và ngày mai điều khoản có hình thức này. (Điều gì xảy ra nếu hằng số là Ở bên trái, bạn có thể tự hỏi? Tốt, đó là một trong những những thứ đóCổ lkèo bóng đá hôm nay và ngày mailà cho ...)

17848_18123

eqselcho=
Neqselcho<
Scalarltselcho<hoặc<=
Scalargtselchohoặc =
Có vẻ hơi kỳ lạ rằng đây là danh mục, nhưng chúng có ý nghĩa nếu bạn nghĩ về nó.=Thông thường sẽ chỉ chấp nhận một nhỏ một phần của kèo bóng đá hôm nay và ngày mai hàng trong bảng;<Thông thường sẽ chỉ từ chối một con nhỏ phân số.<sẽ chấp nhận một phân số Điều đó phụ thuộc vào nơi không đổi đã cho trong phạm vi của kèo bóng đá hôm nay và ngày mai giá trị cho cột bảng đó (mà nó chỉ xảy ra thông tin được thu thập bởiPhân tíchvà có sẵn cho công cụ ước tính chọn lọc).<=sẽ chấp nhận một phần lớn hơn một chút hơn<Để so sánh tương tự không đổi, nhưng chúng đủ gần để không có giá trị phân biệt, đặc biệt là vì chúng ta không có khả năng làm tốt hơn Dù sao thì một phỏng đoán thô. Nhận xét tương tự áp dụng cho =.

Bạn có thể thường xuyên thoát khỏi việc sử dụngeqselhoặcNeqselĐối với các nhà khai thác có độ chọn lọc rất cao hoặc rất thấp, thậm chí Nếu họ không thực sự bình đẳng hoặc bất bình đẳng. Ví dụ, Các kèo bóng đá hôm nay và ngày mai tử hình học gần đúng-bình đẳng sử dụngeqselVề giả định rằng họ sẽ thường Chỉ khớp một phần nhỏ của kèo bóng đá hôm nay và ngày mai mục trong bảng.

Bạn có thể sử dụngScalarltselScalargtselđể so sánh trên kèo bóng đá hôm nay và ngày mai loại dữ liệu có một số phương tiện hợp lý để được chuyển đổi vào vô hướng số để so sánh phạm vi. Nếu có thể, thêm loại dữ liệu cho những người được hiểu bởi thói quenconvert_to_scalar ()in20644_20678. (Sau cùng, Thói quen này nên được thay thế bằng kèo bóng đá hôm nay và ngày mai chức năng theo kiểu dữ liệu được xác định thông qua một cột củapg_type20841_21014

Có các chức năng chọn lọc bổ sung được thiết kế cho kèo bóng đá hôm nay và ngày mai tử hình học trongSRC/Backend/Utils/ADT/Geo_Selfuncs.c: , vị trícontsel. Tại bài viết này, đây chỉ là cuống, nhưng bạn có thể muốn sử dụng chúng (hoặc thậm chí tốt hơn, cải thiện họ) dù sao.

14.3.4. THAM GIA

Thetham giamệnh đề, nếu được cung cấp, tên Chức năng ước tính chọn lọc tham gia cho người vận hành (lưu ý rằng đây là tên hàm, không phải tên kèo bóng đá hôm nay và ngày mai tử).tham giaĐiều khoản chỉ có ý nghĩa đối với nhị phân người vận hành trả vềBoolean21864_21994WHERE-Chlause điều kiện của biểu mẫu

Bảng1.Column1 OP Bảng2.column2

Đối với kèo bóng đá hôm nay và ngày mai tử hiện tại. Như vớiHạn chếmệnh đề, điều này giúp trình tối ưu kèo bóng đá hôm nay và ngày mai rất thực chất bằng cách để nó tìm ra cái nào trong số một số Trình tự tham gia có thể có khả năng nhận ít công việc nhất.

Như trước đây, chương này sẽ không cố gắng giải thích làm thế nào để viết chức năng trình ước tính chọn lọc tham gia, nhưng sẽ chỉ đề nghị bạn sử dụng một trong những công cụ ước tính tiêu chuẩn nếu một áp dụng:

eqjoinselcho=
Neqjoinselcho<
Scalarltjoinselcho<hoặc<=
Scalargtjoinselchohoặc =
Areajoinselcho 2d so sánh dựa trên khu vực
vị tríJoinsel23470_23516
contjoinselcho 2d so sánh dựa trên ngăn chặn

14.3.5. Băm

Thebămmệnh đề, nếu có, Nói với hệ thống rằng sử dụng phương thức tham gia băm cho Tham gia dựa trên kèo bóng đá hôm nay và ngày mai tử này.bămChỉ có ý nghĩa đối với các kèo bóng đá hôm nay và ngày mai tử nhị phân trả vềBooleanvà trong thực tế, người vận hành đã tốt hơn là bình đẳng cho một số loại dữ liệu.

Giả định băm nhỏ tham gia là sự tham gia kèo bóng đá hôm nay và ngày mai tử chỉ có thể trả về true cho các cặp trái và phải Các giá trị băm với cùng mã băm. Nếu hai giá trị được đặt Trong các thùng băm khác nhau, sự tham gia sẽ không bao giờ so sánh chúng tại tất cả, hoàn toàn giả định rằng kết quả của kèo bóng đá hôm nay và ngày mai tử tham gia phải sai. Vì vậy, không bao giờ có ý nghĩa khi chỉ địnhbămĐối với các kèo bóng đá hôm nay và ngày mai tử không đại diện Bình đẳng.

Trên thực tế, bình đẳng logic cũng không đủ tốt; các nhà điều hành đã thể hiện sự bình đẳng bitwise thuần túy hơn, bởi vì Hàm băm sẽ được tính kèo bóng đá hôm nay và ngày mai trên biểu diễn bộ nhớ của các giá trị bất kể các bit có nghĩa là gì. Ví dụ, Bình đẳng của các khoảng thời gian không phải là bình đẳng bitwise; các kèo bóng đá hôm nay và ngày mai tử bình đẳng khoảng thời gian xem xét hai khoảng thời gian bằng nhau Nếu họ có cùng thời lượng, liệu điểm cuối của họ có hay không giống hệt nhau. Điều này có nghĩa là tham gia bằng cách sử dụng=giữa các trường khoảng thời gian sẽ mang lại khác nhau kết quả nếu được thực hiện dưới dạng băm tham gia so với nếu được triển khai một cách khác, bởi vì một phần lớn các cặp nên Kết hợp sẽ băm với các giá trị khác nhau và sẽ không bao giờ được so sánh bởi băm tham gia. Nhưng nếu trình tối ưu hóa chọn sử dụng một loại tham gia, tất cả các cặp mà kèo bóng đá hôm nay và ngày mai tử bình đẳng nói là bằng nhau sẽ được tìm thấy. Chúng tôi không muốn loại không nhất quán đó, Vì vậy, chúng tôi không đánh dấu khoảng bình đẳng khoảng thời gian là có thể băm.

Ngoài ra còn có những cách phụ thuộc vào máy trong đó một băm tham gia có thể không làm được điều đúng đắn. Ví dụ: nếu dữ liệu của bạn Loại là một cấu trúc trong đó có thể có miếng đệm không thú vị bit, không an toàn khi đánh dấu kèo bóng đá hôm nay và ngày mai tử bình đẳngbăm. (Trừ khi, có lẽ, bạn viết cho người khác của mình kèo bóng đá hôm nay và ngày mai nhà khai thác để đảm bảo rằng kèo bóng đá hôm nay và ngày mai bit không sử dụng luôn bằng không.) Một ví dụ khác là kèo bóng đá hôm nay và ngày mai loại dữ liệu dấu phẩy nổi là Không an toàn cho băm tham gia. Trên máy gặpIEEEĐiểm nổi tiêu chuẩn, trừ số 0 và cộng với số 0 là các giá trị khác nhau (các mẫu bit khác nhau) nhưng chúng được xác định để so sánh bằng nhau. Vì vậy, nếu kèo bóng đá hôm nay và ngày mai tử bình đẳng trên các loại dữ liệu dấu phẩy động được đánh dấubăm, trừ 0 và cộng một Zero có lẽ sẽ không được kết hợp bằng một băm tham gia, nhưng chúng sẽ được khớp với bất kỳ quy trình tham gia nào khác.

điểm mấu chốt là bạn có lẽ chỉ nên sử dụngbămĐối với các kèo bóng đá hôm nay và ngày mai tử bình đẳng (hoặc có thể) được thực hiện bởimemcmp ().

14.3.6. Sort1 và Sort2

TheSắp xếpmệnh đề, nếu có, hãy kể hệ thống được phép sử dụng phương thức nối hợp nhất cho một tham gia dựa trên nhà điều hành hiện tại. Cả hai phải được được chỉ định nếu một trong hai là. Nhà điều hành hiện tại phải bình đẳng Đối với một số loại dữ liệu vàSort1Sort2mệnh đề Đặt tên cho kèo bóng đá hôm nay và ngày mai tử đặt hàng ("<"kèo bóng đá hôm nay và ngày mai tử) cho các loại dữ liệu bên trái và bên phải tương ứng.

Hợp nhất tham gia dựa trên ý tưởng sắp xếp bên trái và Các bảng tay phải vào thứ tự và sau đó quét chúng song song. Vì vậy, cả hai loại dữ liệu phải có khả năng được đặt hàng đầy đủ và kèo bóng đá hôm nay và ngày mai tử tham gia phải là một trong những người chỉ có thể thành công cho các cặp của các giá trị rơi vào"Tương tự địa điểm"Theo thứ tự sắp xếp. Trong thực tế, điều này có nghĩa là kèo bóng đá hôm nay và ngày mai tử tham gia phải cư xử như bình đẳng. Nhưng không giống như băm tham gia, trong đó các loại dữ liệu bên trái và bên phải tốt hơn là giống nhau (hoặc ít nhất là tương đương bitwise), có thể hợp nhất-tham gia hai loại dữ liệu riêng biệt miễn là chúng là tương thích về mặt logic. Ví dụ:INT2-versus-INT4Bình đẳng Nhà điều hành có thể hợp nhất. Chúng tôi chỉ cần phân loại các kèo bóng đá hôm nay và ngày mai tử sẽ đưa cả hai loại dữ liệu vào tương thích về mặt logic sự liên tiếp.

Khi chỉ định các kèo bóng đá hôm nay và ngày mai tử Merge-Sort, kèo bóng đá hôm nay và ngày mai tử hiện tại và cả hai kèo bóng đá hôm nay và ngày mai tử được tham chiếu phải trả vềBoolean; TheSort1kèo bóng đá hôm nay và ngày mai tử phải có cả hai loại dữ liệu đầu vào bằng với dòng điện Loại kèo bóng đá hôm nay và ngày mai hạng bên trái của người vận hành vàSort2Nhà điều hành phải có cả hai loại dữ liệu đầu vào bằng với loại kèo bóng đá hôm nay và ngày mai hạng bên phải của kèo bóng đá hôm nay và ngày mai tử hiện tại. (Như vớiCổ lkèo bóng đá hôm nay và ngày maiNEGATOR, điều này có nghĩa là tên người vận hành là đủ để chỉ định kèo bóng đá hôm nay và ngày mai tử và hệ thống có thể làm cho các mục nhập kèo bóng đá hôm nay và ngày mai tử giả nếu bạn tình cờ xác định kèo bóng đá hôm nay và ngày mai tử bình đẳng trước các kèo bóng đá hôm nay và ngày mai tử khác.)

Trong thực tế, bạn chỉ nên viếtSắp xếpmệnh đề cho một=kèo bóng đá hôm nay và ngày mai tử và hai kèo bóng đá hôm nay và ngày mai tử được tham chiếu phải luôn luôn Được đặt tên<. Cố gắng sử dụng Merge Tham gia với kèo bóng đá hôm nay và ngày mai nhà khai thác được đặt tên bất cứ điều gì khác sẽ dẫn đến vô vọng sự nhầm lẫn, vì những lý do chúng ta sẽ thấy trong giây lát.

Có những hạn chế bổ sung đối với các kèo bóng đá hôm nay và ngày mai tử mà bạn đánh dấu hợp nhất-joinable. Những hạn chế này hiện chưa được kiểm tra bởiTạo kèo bóng đá hôm nay và ngày mai tử, nhưng tham gia hợp nhất có thể Thất bại trong thời gian chạy nếu bất kỳ không đúng:

  • kèo bóng đá hôm nay và ngày mai tử bình đẳng có thể hợp nhất phải có một người đăng ký (chính nó nếu hai loại dữ liệu giống nhau hoặc kèo bóng đá hôm nay và ngày mai tử bình đẳng liên quan nếu chúng khác nhau).

  • phải có<Các kèo bóng đá hôm nay và ngày mai tử đặt hàng có cùng các loại dữ liệu kèo bóng đá hôm nay và ngày mai hạng bên trái và phải như Hợp nhất chính nó có thể điều hành. Các kèo bóng đá hôm nay và ngày mai tử nàyphảiđược đặt tên<; Bạn không có bất kỳ lựa chọn nào trong vấn đề, vì không có điều khoản để chỉ định chúng rõ ràng. Lưu ý rằng nếu các loại dữ liệu bên trái và bên phải là khác nhau, cả hai kèo bóng đá hôm nay và ngày mai tử này đều không giống vớiSắp xếpkèo bóng đá hôm nay và ngày mai tử. Nhưng họ đã tốt hơn Đặt hàng các giá trị dữ liệu tương thích vớiSắp xếpNgười vận hành hoặc tham gia hợp nhất sẽ không thành công để làm việc.