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 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

33.13. Tối ưu kèo bóng đá pháp nhà điều hành Thông tin

APostgreSQLkèo bóng đá pháp 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 Quá trình máy chủ gặp sự cố, đầ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ọ cần.

Các điều khoản tối ưu kèo bóng đá pháp 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 8.2.23 Hiểu.

33.13.1.Cổ lkèo bóng đá pháp

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

Loại kèo bóng đá pháp hạng bên trái của kèo bóng đá pháp tử có thể đi lại là giống nhau Là loại kèo bóng đá pháp 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 kèo bóng đá pháp 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ổ lkèo bóng đá phápmệnh đề.

Điều quan trọng là cung cấp thông tin trước cho Các nhà khai thác sẽ được sử dụng trong các chỉ mục và tham gia các mệnh đề, Bởi vì điều này cho phép trình tối ưu kèo bóng đá pháp truy vấn"lật xung quanh"Điều khoản như vậy cho các biểu mẫu cần thiết cho các loại kế hoạch khác nhau. Ví dụ, xem xét một truy vấn với Điều khoản như thế nàoTab1.x = Tab2.y,, Ở đâuTab1.xTab2.ythuộc loại do người dùng định nghĩa và giả sử cái đóTab2.yđược lập chỉ mục. Trình tối ưu kèo bóng đá pháp không thể tạo quét chỉ mục trừ khi nó có thể xác định cách lật mệnh đề xung quanhTab2.y = Tab1.x, Bởi vì máy móc quét chỉ mục dự kiến ​​sẽ thấy Cột được lập chỉ mục ở bên trái của kèo bóng đá pháp tử nó được đưa ra.PostgreSQLWillkhôngChỉ cần giả sử rằng đây là một Chuyển đổi hợp lệ - Người tạo ra=Nhà điều hành phải chỉ định rằng nó hợp lệ, bằng cách Đánh dấu người vận hành bằng kèo bóng đá pháp trước.

Khi bạn đang xác định một kèo bóng đá pháp 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ổ lkèo bóng đá phápmệnh đề trong kèo bóng đá pháp tử đầu tiên 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 hoán Các 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 đá phápĐiều khoản 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 đá phápmệ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 đá phápđề cập đến kèo bóng đá pháp tử không tồn tại, Hệ thống sẽ tạo một mục giả cho kèo bóng đá pháp tử đó trong Danh mục hệ thống. Mục nhập giả này sẽ chỉ có dữ liệu hợp lệ cho tên kèo bóng đá pháp tử, các loại kèo bóng đá pháp hạng bên trái và phải và loại kết quả, vì đó là tất cả những gìPostgreSQLcó thể suy luận tại thờ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 với hình nộm này lối vào. Sau này, khi bạn xác định kèo bóng đá pháp tử thứ hai, Hệ thống cập nhật mục giả với phần bổ sung thông tin từ định nghĩa thứ hai. Nếu bạn cố gắng sử dụng người điều khiển giả trước khi nó được điền vào, bạn sẽ chỉ Nhận thông báo lỗi.

33.13.2.tiêu cực

TheNEGATORmệnh đề, nếu được cung cấp, Đặt tên cho một kèo bóng đá pháp 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 đá pháp tử A là công cụ tiêu cực của kèo bóng đá pháp 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 đá pháp 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 kèo bóng đá pháp 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.

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

Cung cấp trình phủ định là rất hữu ích cho Trình tối ưu kèo bóng đá pháp 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 đá pháp thànhx < y. Điều này xuất hiện thường xuyên hơn bạn nghĩ, bởi vìkhôngHoạt động có thể được chèn dưới dạng Hậu quả của việc sắp xếp lại khác.

Các cặp kèo bóng đá pháp 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.

33.13.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 nhà điều hành. (Lkèo bóng đá pháp ý 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 đá pháp 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 các 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 kèo bóng đá pháp 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ởiWHEREmệnh đề 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ứ đólà cho ...)

Viết các 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 các ướ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ó.=kèo bóng đá pháp thường sẽ chỉ chấp nhận một nhỏ một phần của các hàng trong bảng;<kèo bóng đá pháp 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 kèo bóng đá pháp đượ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 kèo bóng đá pháp tử 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 đá pháp tử hình học gần đúng-bình đẳng sử dụngeqselVề giả định rằng họ thường Chỉ khớp một phần nhỏ của các mục trong bảng.

Bạn có thể sử dụngScalarltselScalargtselđể so sánh trên Các 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 kiểu dữ liệu cho những người được hiểu bởi hàmconvert_to_scalar ()in. (Sau cùng, Chức năng 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 kèo bóng đá pháp 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 kèo bóng đá pháp sẽ không tốt nhất có thể là.

Có các chức năng ước tính chọn lọc bổ sung Được thiết kế cho các kèo bóng đá pháp tử hình học trong22344_22382: Vùng l tính, 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.

33.13.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 kèo bóng đá pháp tử. (Ghi chú rằng đây là tên hàm, không phải tên kèo bóng đá pháp 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 các 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 kèo bóng đá pháp 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 đá pháp 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íjoinselcho 2d so sánh dựa trên vị trí
contjoinselcho 2d so sánh dựa trên ngăn chặn

33.13.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 kèo bóng đá pháp tử này.bămChỉ có ý nghĩa đối với kèo bóng đá pháp tử nhị phân mà 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 đá pháp 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 đá pháp 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 đá pháp tử không đại diện Bình đẳng.

Để được đánh dấubăm, Tham gia kèo bóng đá pháp tử phải xuất hiện trong lớp kèo bóng đá pháp tử chỉ số băm. Đây là không được thi hành khi bạn tạo nhà điều hành, tất nhiên là vì Lớp học tham chiếu không thể tồn tại. Nhưng cố gắng Sử dụng kèo bóng đá pháp tử trong các kết nối băm sẽ thất bại trong thời gian chạy nếu không có như vậy lớp vận hành tồn tại. Hệ thống cần lớp kèo bóng đá pháp tử để Tìm chức năng băm cụ thể theo dữ liệu cho người vận hành Kiểu dữ liệu đầu vào. Tất nhiên, bạn cũng phải cung cấp một hàm băm trước khi bạn có thể tạo lớp kèo bóng đá pháp tử.

Cần phải thực hiện chăm sóc khi chuẩn bị chức năng băm, bởi vì có những cách phụ thuộc vào máy mà nó có thể thất bại để làm điều đúng đắn. Ví dụ: nếu kiểu dữ liệu của bạn là cấu trúc trong đó có thể có các bit pad không thú vị, bạn Không thể chỉ đơn giản chuyển toàn bộ cấu trúc choHash_any. (Trừ khi bạn viết người khác của mình người vận hành và chức năng để đảm bảo rằng các bit không sử dụng là luôn luôn bằng không, đó là chiến lược được đề xuất.) Ví dụ là trên các máy gặpIEEETiêu chuẩn điểm nổi, số 0 âm tính và số 0 dương 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. Nếu một giá trị nổi có thể chứa số 0 âm thì cần thêm các bước để đảm bảo nó tạo ra giá trị băm giống như không.

Lkèo bóng đá pháp ý:hàm cơ bản có thể kết hợp với băm Người vận hành phải được đánh dấu bất biến hoặc ổn định. Nếu nó là dễ bay hơi, hệ thống sẽ không bao giờ cố gắng sử dụng kèo bóng đá pháp tử cho một băm tham gia.

Lkèo bóng đá pháp ý:Nếu một kèo bóng đá pháp tử có thể kết hợp băm có một chức năng cơ bản được đánh dấu nghiêm ngặt, chức năng cũng phải hoàn thành: nghĩa là, nó sẽ trả về đúng hoặc Sai, không bao giờ null, đối với bất kỳ hai đầu vào không phải là bất kỳ. Nếu quy tắc này không được theo dõi, tối ưu hóa băm củainHoạt động có thể tạo ra kết quả sai. (Cụ thể,inCó thể trở lại sai trong đó câu trả lời đúng theo tiêu chuẩn sẽ là null; hoặc nó có thể mang lại một lỗi phàn nàn rằng nó không được chuẩn bị cho một kết quả null.)

33.13.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 có thể sử dụng hợp nhất-tham gia Phương thức tham gia dựa trên kèo bóng đá pháp tử này.Hợp nhấtChỉ có ý nghĩa đối với kèo bóng đá pháp tử nhị phân mà trả vềBooleanvà 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 các 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à kèo bóng đá pháp 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 nơi"Theo thứ tự sắp xếp. Trong thực tế này có nghĩa là kèo bóng đá pháp 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ụ:SmallInt-versus-Số nguyênkèo bóng đá pháp tử bình đẳng có thể hợp nhất. Chúng tôi chỉ cần sắp xếp các nhà khai thác sẽ đưa cả hai loại dữ liệu vào một Trình tự tương thích.

Thực hiện tham gia hợp nhất yêu cầu hệ thống có thể Để xác định bốn kèo bóng đá pháp 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 kèo bóng đá pháp hạng bên trái, ít so với so sánh cho loại dữ liệu kèo bóng đá pháp hạng 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 kèo bóng đá pháp tử khác biệt nếu kèo bóng đá pháp tử có thể hợp nhất có hai Các loại dữ liệu kèo bóng đá pháp hạng khác nhau; Nhưng khi các loại kèo bóng đá pháp hạng là giống nhau, ba kèo bóng đá pháp tử ít hơn đều giống nhau kèo bóng đá pháp tử.) Có thể chỉ định các kèo bóng đá pháp tử này cá nhân theo tên, nhưSort1, Sort2, LTCMP,, VàGTCMPTùy chọn tương ứng. Các 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 được bỏ qua khiHợp nhấtđược chỉ định. Cũng,Hợp nhấtsẽ được giả định là Bốn tùy chọn kèo bóng đá pháp tử này xuất hiện, do đó có thể Chỉ cần chỉ định một số trong số họ và để hệ thống điền vào nghỉ ngơi.

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

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

  • Một kèo bóng đá pháp 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 dữ liệu kèo bóng đá pháp hạng Các loại giống nhau, hoặc một kèo bóng đá pháp tử bình đẳng có liên quan nếu chúng khác nhau).

  • Nếu có kèo bóng đá pháp 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 kèo bóng đá pháp 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 kèo bóng đá pháp tử hợp nhất phải có khả năng chuyển tiếp.

  • Kết quả kỳ lạ sẽ xảy ra khi chạy nếu bốn người Các kèo bóng đá pháp 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.

Lkèo bóng đá pháp ý:Chức năng cơ bản có thể hợp nhất Người vận hành phải được đánh dấu bất biến hoặc ổn định. Nếu nó là dễ bay hơi, hệ thống sẽ không bao giờ cố gắng sử dụng kèo bóng đá pháp tử cho một sự hợp nhất tham gia.

Lkèo bóng đá pháp ý:inPostgreSQLPhiên bản trước 7.3,Hợp nhấttốc ký thì không Có sẵn: Để tạo ra một kèo bóng đá pháp 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<