APostgreSQLĐịnh nghĩa soi kèo bóng đá truoctran tử có thể bao gồm một số điều khoản tùy chọn cho hệ thống những điều hữu ích về cách thức hoạt động của người vận hành. Các mệnh đề này 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 soi kèo bóng đá truoctran tử.
Các mệnh đề tối ưu soi kèo bóng đá truoctran bổ sung có thể được thêm vào trong các phiên bản tương lai củaPostgreSQL. Những cái được mô tả ở đây là tất cả những cái phát hành 18beta1 hiểu.
Cũng có thể gắn hàm hỗ trợ kế hoạch vào chức năng làm nền tảng cho người vận hành, cung cấp một cách khác để nói với hệ thống về hành vi của soi kèo bóng đá truoctran tử. Nhìn thấyPhần 36.11Để biết thêm soi kèo bóng đá truoctran.
Cổ lưu
#TheCổ lưu
mệnh đề, nếu được cung cấp, đặt tên cho một soi kèo bóng đá truoctran tử là người làm thư viện của soi kèo bóng đá truoctran tử được xác định. Chúng tôi nói rằng soi kèo bóng đá truoctran tử A là người giao dịch của soi kèo bóng đá truoctran tử B nếu (x a y) bằng (y b x) cho tất cả các giá trị đầu vào có thể có x, y.<
vàĐối với một loại dữ liệu cụ thể thường là người giao cổ và soi kèo bóng đá truoctran tử
+
thường là tự giao với chính nó. Nhưng soi kèo bóng đá truoctran tử-
thường không giao hoán với bất cứ điều gì.
Loại soi kèo bóng đá truoctran hạng bên trái của soi kèo bóng đá truoctran tử có thể giao lại giống như loại soi kèo bóng đá truoctran hạng bên phải của người giao dịch và ngược lại. Vì vậy, tên của soi kèo bóng đá truoctran tử giao dịch là tất cảPOSTGRESQLCần được đưa ra để tìm kiếm người giao dịch và đó là tất cả những gì cần được cung cấp trongCổ lưu
mệ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 điều khoản, vì điều này cho phép trình tối ưu soi kèo bóng đá truoctran truy vấnlậ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 mệnh đề WHERE nhưTab1.x = Tab2.y
, trong đóTab1.x
vàTab2.y
thuộc loại do người dùng định nghĩa và giả sử rằngTab2.y
được lập chỉ mục. Trình tối ưu soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran tử được đưa ra.PostgreSQLWillkhôngChỉ cần giả sử rằng đây là một phép biế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 soi kèo bóng đá truoctran tử với thông tin cổ góp.
NEGATOR
#TheNEGATOR
mệnh đề, nếu được cung cấp, đặt tên cho một soi kèo bóng đá truoctran tử là công cụ phủ định của soi kèo bóng đá truoctran tử được xác định. Chúng tôi nói rằng soi kèo bóng đá truoctran tử A là công cụ phủ định của soi kèo bóng đá truoctran tử B nếu cả hai kết quả boolean trả về và (x a y) bằng không (x b y) cho tất cả các đầu vào có thể x, y.<
và =
là một cặp tiêu cực cho hầu hết các loại dữ liệu. Người vận hành 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 soi kèo bóng đá truoctran tử Unary có thể được đánh dấu một cách hợp lệ 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.
Người phủ định của soi kèo bóng đá truoctran tử phải có cùng các loại soi kèo bóng đá truoctran hạng bên trái và/hoặc bên phải như soi kèo bóng đá truoctran tử được xác địnhCổ lưu
, Chỉ cần có tên soi kèo bóng đá truoctran tử trongNEGATOR
mệnh đề.
Cung cấp trình phủ định rất hữu ích cho trình tối ưu soi kèo bóng đá truoctran truy vấn vì nó cho phép các biểu thức nhưkhông (x = y)
Để được đơn giản soi kèo bóng đá truoctran thànhx < y
. Điều này xuất hiện thường xuyên hơn bạn nghĩ, bởi vìkhông
Hoạt động có thể được chèn vào hậu quả của các sắp xếp lại khác.
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 soi kèo bóng đá truoctran tử. (Lưu ý rằng đây là tên hàm, không phải tên soi kèo bóng đá truoctran tử.)Hạn chế
Điều khoản chỉ có ý nghĩa đối với các soi kèo bóng đá truoctran tử nhị phân trả vềBoolean
. Ý tưởng đằng sau một công cụ ước tính chọn lọc hạn chế là đoán xem phần nào của các hàng trong bảng sẽ thỏa mãn mộtWHERE
-Chlause điều kiện của biểu mẫu:
Cột op hằng số
Đối với soi kèo bóng đá truoctran 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ề số lượng hàng sẽ được loại bỏ bởiWHERE
Điều khoản có hình thức này. (Điều gì xảy ra nếu hằng số ở bên trái, bạn có thể tự hỏi? Chà, đó là một trong những điều đóCổ lưu
là cho ...)
Viết các chức năng ước tính chọn lọc giới hạn mới vượt xa phạm vi của chương này, nhưng may mắn thay, bạn thường chỉ có thể sử dụng một trong những công 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 người ước tính hạn chế tiêu chuẩn:
eqsel cho= |
Neqsel cho< |
Scalarltsel cho< |
Scalarlesel cho<= |
Scalargtsel cho
|
Scalargesel cho = |
Bạn có thể thường xuyên thoát khỏi việc sử dụngeqsel
hoặcNeqsel
Đối với các nhà khai thác có độ chọn lọc rất cao hoặc rất thấp, ngay cả khi chúng không thực sự bình đẳng hoặc bất bình đẳng. Ví dụ: các soi kèo bóng đá truoctran tử hình học bình đẳng gần đúng sử dụngEQSEL
Về giả định rằng chúng thường chỉ khớp với một phần nhỏ của các mục trong bảng.
Bạn có thể sử dụngScalarltsel
, Scalarlesel
, Scalargtsel
vàScalargesel
Để so sánh các loại dữ liệu có một số phương tiện hợp lý để được chuyển đổi thành vô hướng số để so sánh phạm vi. Nếu có thể, hãy thêm kiểu dữ liệu vào các loại được hiểu bởi hàmconvert_to_scalar ()
in20790_20824
. .PG_TYPE
Danh mục hệ thống; Nhưng điều đó vẫn chưa xảy ra.) Nếu bạn không làm điều này, mọi thứ vẫn hoạt động, nhưng ước tính của trình tối ưu soi kèo bóng đá truoctran sẽ không tốt như họ có thể.
Một chức năng ước tính chọn lọc tích hợp hữu ích khác làMatchingsel
, sẽ hoạt động cho hầu hết mọi soi kèo bóng đá truoctran tử nhị phân, nếu thống kê MCV và/hoặc Biểu đồ tiêu chuẩn được thu thập cho loại dữ liệu đầu vào. Ước tính mặc định của nó được đặt thành hai lần ước tính mặc định được sử dụng trongeqsel
, Làm cho nó phù hợp nhất cho các soi kèo bóng đá truoctran tử so sánh có phần ít nghiêm ngặt hơn bình đẳng. (Hoặc bạn có thể gọi là cơ bảnGeneric_Restriction_Selectivity
Hàm, cung cấp ước tính mặc định khác.)
Có các chức năng ước tính chọn lọc bổ sung được thiết kế cho các soi kèo bóng đá truoctran tử hình học trong21852_21890
: ,
vị trí
vàcontsel
. Trong bài viết này, đây chỉ là những sơ khai, nhưng bạn có thể muốn sử dụng chúng (hoặc thậm chí tốt hơn, dù sao cũng cải thiện chúng).
Tham gia
#TheTham gia
mệnh đề, nếu được cung cấp, đặt tên cho chức năng ước tính chọn lọc tham gia cho soi kèo bóng đá truoctran tử. (Lưu ý rằng đây là tên hàm, không phải tên soi kèo bóng đá truoctran tử.)tham gia
Điều khoản chỉ có ý nghĩa đối với các soi kèo bóng đá truoctran tử nhị phân trả vềBoolean
. Ý tưởng đằng sau một công cụ ước tính chọn lọc tham gia là đoán được phần nào của các hàng trong một cặp bảng sẽ thỏa mãn mộtWHERE
-Chlause điều kiện của biểu mẫu:
Bảng1.Column1 OP Bảng2.column2
Đối với soi kèo bóng đá truoctran tử hiện tại. Như vớiHạn chế
Điều này, điều này giúp trình tối ưu soi kèo bóng đá truoctran rất đáng kể bằng cách để nó tìm ra trình tự tham gia nào có thể có khả năng thực hiện công việc ít nhất.
23219_23416
eqjoinsel cho= |
Neqjoinsel cho< |
Scalarltjoinsel cho< |
Scalarlejoinsel cho<= |
Scalargtjoinsel cho
|
Scalargejoinsel cho = |
MatchingJoinsel Đối với các soi kèo bóng đá truoctran tử khớp chung |
Areajoinsel Đối với các so sánh dựa trên khu vực 2D |
vị tríJoInsel Đối với các so sánh dựa trên vị trí 2D |
contjoinsel để so sánh dựa trên ngăn chặn 2D |
băm
#Thebăm
mệnh đề, nếu có, hãy nói với hệ thống rằng có thể sử dụng phương thức nối băm cho tham gia dựa trên soi kèo bóng đá truoctran tử này.băm
Chỉ có ý nghĩa đối với soi kèo bóng đá truoctran tử nhị phân trả vềBoolean
và trong thực tế, soi kèo bóng đá truoctran tử phải biểu thị sự bình đẳng cho một số loại dữ liệu hoặc cặp loại dữ liệu.
25373_25723băm
Đối với các soi kèo bóng đá truoctran tử không đại diện cho một số dạng bình đẳng. Trong hầu hết các trường hợp, chỉ thực tế để hỗ trợ băm cho các nhà khai thác lấy cùng một loại dữ liệu ở cả hai phía.bằngHồiGiá trị, mặc dù các giá trị có các biểu diễn khác nhau. Ví dụ: việc sắp xếp thuộc tính này khá đơn giản khi các số nguyên có chiều rộng khác nhau.
Để được đánh dấubăm
, soi kèo bóng đá truoctran tử tham gia phải xuất hiện trong họ soi kèo bóng đá truoctran tử chỉ số băm. Điều này không được thực thi khi bạn tạo nhà điều hành, vì tất nhiên gia đình điều hành tham chiếu chưa thể tồn tại.
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 trong đó nó có thể không làm được điều đúng đắn. Ví dụ: nếu kiểu dữ liệu của bạn là một cấu trúc trong đó có thể có các bit pad không thú vị, bạn không thể chỉ cần chuyển toàn bộ cấu trúc sangHash_any
. (Trừ khi bạn viết các soi kèo bóng đá truoctran tử và chức năng khác của mình để đảm bảo rằng các bit không sử dụng luôn bằng không, đó là chiến lược được đề xuất.) Một ví dụ khác là trên các máy gặpIEEETiêu chuẩn điểm nổi, 0 âm và 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ư 0.
Một soi kèo bóng đá truoctran tử có thể kết hợp với băm phải có một người giao dịch (chính nó nếu hai loại dữ liệu soi kèo bóng đá truoctran hạng giống nhau hoặc một soi kèo bóng đá truoctran tử bình đẳng có liên quan nếu chúng khác nhau) xuất hiện trong cùng một họ soi kèo bóng đá truoctran tử. Nếu đây không phải là trường hợp, các lỗi của kế hoạch có thể xảy ra khi người vận hành được sử dụng.
Hàm cơ bản Một soi kèo bóng đá truoctran tử có thể kết hợp băm phải được đánh dấu bất biến hoặc ổn định. Nếu nó biến động, hệ thống sẽ không bao giờ cố gắng sử dụng soi kèo bóng đá truoctran tử cho một băm tham gia.
Nếu một soi kèo bóng đá truoctran tử có thể kết hợp băm có một hàm cơ bản được đánh dấu nghiêm ngặt, hàm cũng phải được hoàn thành: nghĩa là, nó sẽ trả về đúng hoặc sai, không bao giờ null, cho 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 tuân theo, tối ưu hóa băm củain
Hoạt động có thể tạo ra kết quả sai. (Cụ thể,in
có thể trả về 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.)
Hợp nhất
#TheMerges
mệnh đề, nếu có, hãy nói với hệ thống rằng có thể sử dụng phương thức Merge-join để tham gia dựa trên soi kèo bóng đá truoctran tử này.Merges
Chỉ có ý nghĩa đối với soi kèo bóng đá truoctran tử nhị phân trả vềBoolean
và trong thực tế, người vận hành phải biểu thị sự bình đẳng cho một số loại dữ liệu hoặc cặp loại dữ liệu.
Hợp nhất tham gia dựa trên ý tưởng sắp xếp các bảng bên trái và bên phải theo 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à soi kèo bóng đá truoctran tử tham gia phải là một loại chỉ có thể thành công cho các cặp giá trị rơi vàoHồicùng một nơi”Theo thứ tự sắp xếp. Trong thực tế, điều này có nghĩa là soi kèo bóng đá truoctran tử tham gia phải hoạt động như bình đẳng.SmallInt
-versus-Số nguyên
soi kèo bóng đá truoctran tử bình đẳng có thể hợp nhất. Chúng tôi chỉ cần các soi kèo bóng đá truoctran tử sắp xếp sẽ đưa cả hai loại dữ liệu vào một chuỗi tương thích về mặt logic.
Để được đánh dấuHợp nhất
, soi kèo bóng đá truoctran tử tham gia phải xuất hiện với tư cách là thành viên bình đẳng của ABtree
Gia đình vận hành chỉ mục. Điều này không được thực thi khi bạn tạo nhà điều hành, vì tất nhiên gia đình điều hành tham chiếu chưa thể tồn tại.Hợp nhất
cờ do đó hoạt động như một gợi ý cho người lập kế hoạch rằng nó đáng để tìm kiếm một gia đình vận hành phù hợp.
Một soi kèo bóng đá truoctran tử có thể hợp nhất phải có một người giao dịch (chính nó nếu hai loại dữ liệu soi kèo bóng đá truoctran hạng giống nhau hoặc một soi kèo bóng đá truoctran tử bình đẳng có liên quan nếu chúng khác nhau) xuất hiện trong cùng một họ soi kèo bóng đá truoctran tử. Nếu đây không phải là trường hợp, các lỗi của kế hoạch có thể xảy ra khi người vận hành được sử dụng.Btree
Họ vận hành hỗ trợ nhiều loại dữ liệu để cung cấp các soi kèo bóng đá truoctran tử bình đẳng cho mọi kết hợp của các loại dữ liệu; Điều này cho phép tối ưu hóa tốt hơn.
Hàm cơ bản Một soi kèo bóng đá truoctran tử có thể hợp nhất phải được đánh dấu bất biến hoặc ổn định. Nếu nó không ổn định, hệ thống sẽ không bao giờ cố gắng sử dụng soi kèo bóng đá truoctran tử để nối hợp nhất.