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
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 tỷ lệ kèo bóng đá tối nay phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

11.3. Tối ưu tỷ lệ kèo bóng đá tối nay nhà điều hành Thông tin

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

APostgreSQLtỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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.3.21 Hiểu.

11.3.1. Người giao dịch

TheCổ lưumệnh đề, nếu được cung cấp, Đặt tên cho một tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay tử-thường không giao hoán với bất cứ điều gì.

Loại tỷ lệ kèo bóng đá tối nay hạng bên trái của tỷ lệ kèo bóng đá tối nay tử đi lại giống như Loại tỷ lệ kèo bóng đá tối nay hạng bên phải của công cụ chuyển đổi của nó, và ngược lại. Vì thế Tên của tỷ lệ kèo bóng đá tối nay tử giao dịch là tất cảPostgreSQLCầ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ổ lưumệnh đề.

Khi bạn đang xác định một tỷ lệ kèo bóng đá tối nay tử tự Commutated, bạn chỉ Làm điều đó. Khi bạn đang xác định một cặp nhà khai thác giao hoán, Mọi thứ trở nên khó khăn hơn một chút: làm thế nào người đầu tiên có thể trở thành được xác định tham khảo cái khác mà bạn chưa xác định được? Có hai giải pháp cho vấn đề này:

  • Một cách là bỏ quaCổ lưumệnh đề trong tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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ổ lưumệ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ổ lưumệnh đề trong cả hai định nghĩa. KhiPostgreSQLxử lý đầu tiên định nghĩa và nhận ra rằngCổ lưuđề cập đến không tồn tại nhà điều hành, hệ thống sẽ tạo ra một mục giả cho điều đó Nhà điều hành trong danh mục hệ thống. Mục giả này sẽ có Dữ liệu hợp lệ chỉ cho tên tỷ lệ kèo bóng đá tối nay tử, trái và phải Các loại tỷ lệ kèo bóng đá tối nay hạng và loại kết quả, vì đó là tất cảPostgreSQLCó thể suy luận tại Điểm này. Mục nhập danh mục của nhà điều hành đầu tiên sẽ liên kết đến Mục giả này. Sau này, khi bạn xác định cái thứ hai nhà điều hành, hệ thống cập nhật mục nhập giả với Thông tin bổ sung từ định nghĩa thứ hai. Nếu bạn Cố gắng sử dụng tỷ lệ kèo bóng đá tối nay tử giả trước khi nó được điền vào, Bạn sẽ chỉ nhận được một thông báo lỗi. (Lưu ý: Thủ tục này đã làm không hoạt động đáng tin cậy trongPostgreSQLphiê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.)

11.3.2. Người phủ định

TheNEGATORmệnh đề, nếu được cung cấp, Đặt tên cho một tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay tử A là công cụ tiêu cực của tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay tử không bao giờ có thể là người tiêu cực của chính nó.

Không giống như các giao dịch, một cặp tỷ lệ kèo bóng đá tối nay tử Unary có thể hợp lệ được đánh dấu là người tiêu cực của nhau; Điều đó có nghĩa là (a x) bằng không (b x) cho tất cả x, hoặc tương đương với đúng người vận hành.

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 tỷ lệ kèo bóng đá tối nay hạng là chính tỷ lệ kèo bóng đá tối nay tử, vì vậy cũng giống như vớiCổ lưu, Chỉ có tên tỷ lệ kèo bóng đá tối nay tử cần được đưa ra trongNEGATORmệnh đề.

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

cặp tỷ lệ kèo bóng đá tối nay 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.

11.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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay tử nhị phân trả vềBoolean. Ý tưởng đằng sau sự chọn lọc hạn chế người ước tính là đoán được phần nào của tỷ lệ kèo bóng đá tối nay hàng trong bảng sẽ thỏa mãn aWHERE-Chlause điều kiện của biểu mẫu

Cột op hằng số

Đối với tỷ lệ kèo bóng đá tối nay 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ởiWHEREtỷ lệ kèo bóng đá tối nay đ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ổ lưulà cho ...)

Viết tỷ lệ kèo bóng đá tối nay chức năng ước tính chọn lọc giới hạn mới là vượt xa phạm vi của chương này, nhưng may mắn thay, bạn có thể thường chỉ cần sử dụng một trong tỷ lệ kèo bóng đá tối nay ước tính tiêu chuẩn của hệ thống cho Nhiều nhà khai thác của riêng bạn. Đây là những hạn chế tiêu chuẩn người ước tính:

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ó.=tỷ lệ kèo bóng đá tối nay thường sẽ chỉ chấp nhận một nhỏ một phần của các hàng trong bảng;<tỷ lệ kèo bóng đá tối nay 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 các giá trị cho cột bảng đó (mà nó chỉ xảy ra tỷ lệ kèo bóng đá tối nay đượ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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay mục trong bảng.

Bạn có thể sử dụngScalarltselScalargtselđể so sánh trên tỷ lệ kèo bóng đá tối nay 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 ()in. (Sau cùng, Thói quen này nên được thay thế bằng các chức năng theo kiểu dữ liệu được xác định tỷ lệ kèo bóng đá tối nay qua một cột củaPG_TYPEDanh mục hệ thống; Nhưng điều đó không có đã xảy ra chưa.) Nếu bạn không làm điều này, mọi thứ vẫn sẽ hoạt động, Nhưng ước tính của trình tối ưu tỷ lệ kèo bóng đá tối nay sẽ không tốt nhất có thể là.

Có các chức năng chọn lọc bổ sung được thiết kế cho tỷ lệ kèo bóng đá tối nay tử hình học trong: , 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.

11.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 tỷ lệ kèo bóng đá tối nay 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ềBoolean. Ý tưởng Đằng sau một công cụ ước tính chọn lọc tham gia là đoán xem phần nào của tỷ lệ kèo bóng đá tối nay hàng trong một cặp bảng sẽ thỏa mãnWHERE-Chlause điều kiện của biểu mẫu

Bảng1.Column1 OP Bảng2.column2

Đối với tỷ lệ kèo bóng đá tối nay tử hiện tại. Như vớiHạn chếmệnh đề, điều này giúp trình tối ưu tỷ lệ kèo bóng đá tối nay 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 =
cho 2d so sánh dựa trên khu vực
vị tríJoInselcho 2d so sánh dựa trên vị trí
contjoinselcho 2d so sánh dựa trên ngăn chặn

11.3.5. Băm

Thebămmệnh đề, nếu có, nói với hệ thống rằng việc sử dụng băm tham gia Phương thức tham gia dựa trên tỷ lệ kèo bóng đá tối nay tử này.bămChỉ có ý nghĩa đối với các tỷ lệ kèo bóng đá tối nay tử nhị phân đó trở lạiBooleanvà 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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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à tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay tử bình đẳngbăm. (Trừ khi, có lẽ, bạn viết cho người khác của mình tỷ lệ kèo bóng đá tối nay nhà khai thác để đảm bảo rằng tỷ lệ kèo bóng đá tối nay bit không sử dụng luôn bằng không.) Một ví dụ khác là tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay tử bình đẳng trên các loại dữ liệu dấu phẩy động được đánh dấubăm, trừ số 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 tỷ lệ kèo bóng đá tối nay tử bình đẳng (hoặc có thể) được thực hiện bởimemcmp ().

11.3.6.Hợp nhất(Sort1, Sort2, LTCMP, GTCMP)

TheHợp nhấtmệnh đề, nếu có, nói với hệ thống rằng việc sử dụng tham gia hợp nhất Phương thức tham gia dựa trên tỷ lệ kèo bóng đá tối nay tử này.Hợp nhấtChỉ có ý nghĩa đối với các tỷ lệ kèo bóng đá tối nay tử nhị phân đó trở lạiBooleanvà trong thực tế người vận hành phải biểu diễn bình đẳng cho một số loại dữ liệu hoặc cặp của tỷ lệ kèo bóng đá tối nay loại dữ liệu.

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 vào song song. Vì vậy, cả hai loại dữ liệu phải có khả năng hoàn toàn đặt hàng và tỷ lệ kèo bóng đá tối nay tử tham gia phải là một trong những chỉ có thể thành công cho các cặp giá trị rơi vào"cùng một địa điểm"Theo thứ tự sắp xếp. Trong thực tế này có nghĩa là tỷ lệ kèo bóng đá tối nay tử tham gia phải cư xử như bình đẳng. Nhưng Không giống như băm tham gia, nơi các loại dữ liệu bên trái và bên phải có Tốt hơn là giống nhau (hoặc ít nhất là tương đương bitwise), nó là có thể hợp nhất-tham gia với hai loại dữ liệu riêng biệt miễn là chúng 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 tỷ lệ kèo bóng đá tối nay 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.

Thực hiện tham gia hợp nhất yêu cầu hệ thống có thể Để xác định bốn tỷ lệ kèo bóng đá tối nay tử liên quan đến bình đẳng hợp nhất Nhà điều hành: So sánh ít hơn cho kiểu dữ liệu đầu vào bên trái, ít so với so sánh cho loại dữ liệu đầu vào bên phải, ít hơn so sánh giữa hai loại dữ liệu và lớn hơn So sánh giữa hai loại dữ liệu. (Đây thực sự là bốn Các tỷ lệ kèo bóng đá tối nay tử khác biệt nếu tỷ lệ kèo bóng đá tối nay tử có thể hợp nhất có hai Các loại dữ liệu đầu vào khác nhau; Nhưng khi các loại đầu vào là Tương tự ba tỷ lệ kèo bóng đá tối nay tử ít hơn là cùng một tỷ lệ kèo bóng đá tối nay tử.) Có thể chỉ định các tỷ lệ kèo bóng đá tối nay tử này theo tên, nhưSort1, Sort2, LTCMPGTCMPTùy chọn tương ứng. Hệ thống sẽ điền vào tên mặc định<, <, <, tương ứng nếu bất kỳ trong số này là bị bỏ qua khiMergesđược chỉ định. Cũng,Hợp nhấtsẽ được coi là ngụ ý nếu bất kỳ tùy chọn tỷ lệ kèo bóng đá tối nay tử nào trong số bốn người này xuất hiện, vì vậy nó là có thể chỉ định một số trong số họ và để hệ thống điền vào trong phần còn lại.

Các loại dữ liệu đầu vào của bốn tỷ lệ kèo bóng đá tối nay tử so sánh có thể suy ra từ các loại đầu vào của tỷ lệ kèo bóng đá tối nay tử có thể kết hợp, vì vậy giống như vớiCổ lưu, Chỉ có Tên người vận hành cần được đưa ra trong các mệnh đề này. Trừ khi bạn là Sử dụng các lựa chọn đặc biệt của tên tỷ lệ kèo bóng đá tối nay tử, nó đủ để viếtHợp nhấtVà để hệ thống điền vào Trong tỷ lệ kèo bóng đá tối nay chi tiết. (Như vớiCổ lưuNEGATOR, hệ thống có thể làm cho các mục nhập tỷ lệ kèo bóng đá tối nay tử giả nếu bạn tình cờ xác định tỷ lệ kèo bóng đá tối nay tử bình đẳng trước các tỷ lệ kèo bóng đá tối nay tử khác.)

Có những hạn chế bổ sung đối với các tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay tử, nhưng có thể xảy ra lỗi Khi tỷ lệ kèo bóng đá tối nay tử được sử dụng nếu có không đúng:

  • Một tỷ lệ kèo bóng đá tối nay tử bình đẳng có thể hợp nhất phải có một Hợp nhất-hợp đồng có thể kết hợp (chính nó nếu hai loại dữ liệu là giống nhau, hoặc một tỷ lệ kèo bóng đá tối nay tử bình đẳng liên quan nếu chúng là khác biệt).

  • Nếu có tỷ lệ kèo bóng đá tối nay tử có thể hợp nhất liên quan đến bất kỳ hai Dữ liệu loại A và B, và một tỷ lệ kèo bóng đá tối nay tử có thể hợp nhất khác liên quan B với bất kỳ loại dữ liệu thứ ba nào C, sau đó A và C cũng phải có một nhà điều hành hợp nhất có thể kết hợp; Nói cách khác, có một tỷ lệ kèo bóng đá tối nay tử hợp nhất phải có khả năng chuyển tiếp.

  • Kết quả kỳ quái sẽ xảy ra khi chạy nếu bốn người Các tỷ lệ kèo bóng đá tối nay tử so sánh bạn tên không sắp xếp các giá trị dữ liệu có thể tương thích.

Lưu ý:inPostgreSQLPhiên bản trước 7.3,Hợp nhấttốc ký không Có sẵn: Để tạo ra một tỷ lệ kèo bóng đá tối nay tử có thể hợp nhất, người ta phải Viết cả haiSort1Sort2rõ ràng. Ngoài ra,LTCMPGTCMPTùy chọn không tồn tại; Tên của những người vận hành là Hardwired as<