Postgresql 8.2.23 Tài liệu | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 54. Cách người lập kế hoạch sử tỷ lệ kèo bóng đá 88ng thống kê | Chuyển tiếp nhanh | Tiếp theo |
Sử tỷ lệ kèo bóng đá 88ng các ví dụ được rút ra từ cơ sở dữ liệu kiểm tra hồi quy, hãy để chúng ta hãy Bắt đầu với một truy vấn rất đơn giản:
Giải thích chọn * từ TENK1; Kế hoạch truy vấn --------------------------------------------------------------------- SEQ SCAN trên TENK1 (chi phí = 0,00..445,00 tỷ lệ kèo bóng đá 88 = 10000 chiều rộng = 244)
Cách người lập kế hoạch xác định tỷ lệ kèo bóng đá 88 chất củatenk1
được bao phủ trongPhần 13.1, nhưng được lặp lại ở đây cho
hoàn chỉnh. Số lượng tỷ lệ kèo bóng đá 88 được tra cứu từpg_ class
:
10802_10939
Người lập kế hoạch sẽ kiểm traRelpagesƯớc tỷ lệ kèo bóng đá 88 (đây là một hoạt động giá rẻ) và nếu không chính xác có thể tỷ lệReltuplesĐể có được ước tỷ lệ kèo bóng đá 88. Trong trường hợp này, nó không, do đó:
tỷ lệ kèo bóng đá 88 = 10000
Hãy chuyển sang một ví dụ với điều kiện phạm vi trongWHEREmệnh đề:
11377_11622
Người lập kế hoạch kiểm traWHEREmệnh đề tình trạng:
độc đáo1 <1000
Và tìm kiếm chức năng hạn chế cho người vận hành<inpg_operator
. Cái này được giữ trong cộtOprrestvà kết quả trong trường hợp này
làScalarltsel
. TheScalarltsel
Hàm lấy biểu đồ
vìđộc đáo1từpg_statistic
- Chúng ta có thể theo dõi điều này bằng cách sử tỷ lệ kèo bóng đá 88ng
đơn giản hơnpg_stats
Xem:
Chọn Biểu đồ_bound từ PG_Stats Trong đó tablename = 'tenk1' và attname = 'độc đáo1'; Biểu đồ_bound ------------------------------------------------------------------ 1,970,1943,2958,3971,5069,6028,7007,7919,8982,9995
Tiếp theo tỷ lệ của biểu đồ bị chiếm bởi"<1000"được thực hiện. Đây là chọn lọc. Biểu đồ chia phạm vi thành tần số bằng nhau Xô, vì vậy tất cả những gì chúng ta phải làm là định vị xô mà giá trị của chúng ta đang ở và đếmPhầncủa nó vàtất cảcủa những người trước. Giá trị 1000 rõ ràng trong lần thứ hai (970 - 1943) Xô, vì vậy bằng cách giả sử phân phối tuyến tỷ lệ kèo bóng đá 88 của các giá trị bên trong Mỗi thùng chúng ta có thể tỷ lệ kèo bóng đá 88 toán tỷ lệ kèo bóng đá 88 chọn lọc là:
chọn lọc = (1 + (1000 - bckt [2] .min)/(bckt [2] .max - bckt [2] .min))/num_bckts = (1 + (1000 - 970)/(1943 - 970))/10 = 0.1031
nghĩa là, một nhóm toàn bộ cộng với một phần tuyến tỷ lệ kèo bóng đá 88 của
Thứ hai, chia cho số lượng thùng. Số lượng ước tỷ lệ kèo bóng đá 88 của
Hàng hiện có thể được tỷ lệ kèo bóng đá 88 là sản phẩm của tỷ lệ kèo bóng đá 88 chọn lọc và
Cardinality củaTenk1
:
tỷ lệ kèo bóng đá 88 = rel_cardinality * chọn lọc = 10000 * 0.1031 = 1031
Tiếp theo hãy xem xét một ví dụ với điều kiện bình đẳng trongWHEREmệnh đề:
Giải thích Chọn * từ Tenk1 trong đó StringU1 = 'Ataaaa'; Kế hoạch truy vấn ---------------------------------------------------------------------- SEQ SCAN trên TENK1 (chi phí = 0,00..470.00 tỷ lệ kèo bóng đá 88 = 31 chiều rộng = 244) Bộ lọc: (StringU1 = 'ataaaa' :: name)
Một lần nữa người lập kế hoạch kiểm traWHERE14193_14215
StringU1 = 'Ataaaa'
và tìm kiếm chức năng hạn chế cho=, đó làeqsel
.
Trường hợp này hơi khác một chút, vì các giá trị phổ biến nhất -MCVs, được sử tỷ lệ kèo bóng đá 88ng để xác định
sự chọn lọc. Chúng ta hãy xem những cái này, với một số
các cột sẽ hữu ích sau:
Chọn Null_Frac, N_Distince, Most_Common_Vals, Most_Common_FREQS từ Trong đó tablename = 'tenk1' và attname = 'StringU1'; null_frac | 0 n_distince | 672 Hầu hết_common_vals | Fdaaaa, nhaaaa, ataaaa, bgaaaa, ebaaaa, moaaaa, ndaaaa, owaaaa, bhaaaa, bjaaaa
Độ chọn lọc chỉ là tần số phổ biến nhất (MCF) tương ứng với Thứ baMCV- 'Ataaaa':
Chọn lọc = MCF [3] = 0,003
Số lượng hàng ước tỷ lệ kèo bóng đá 88 chỉ là sản phẩm của điều này với
Cardinality củaTENK1
như
trtỷ lệ kèo bóng đá 88:
tỷ lệ kèo bóng đá 88 = 10000 * 0,003 = 30
Số được hiển thị bởiGiải thíchIS nhiều hơn thế này, do một số kiểm tra ước tỷ lệ kèo bóng đá 88 bài đăng.
Bây giờ hãy xem xét cùng một truy vấn, nhưng với một hằng số không trongMCVDanh sách:
15797_16041
Đây là một vấn đề khá khác, cách ước tỷ lệ kèo bóng đá 88 chọn lọc khi giá trị làkhông16187_16197MCVDanh sách. Cách tiếp cận là sử tỷ lệ kèo bóng đá 88ng thực tế rằng giá trị không nằm trong danh sách, kết hợp với kiến thức về tần số cho tất cảMCVS:
chọn lọc = (1 - sum (mvf))/(num_distince - num_mcv) = (1 - (0,00333333 + 0,00333333 + 0,003 + 0,003 + 0,003 + 0,003 + 0,003 + 0,003 + 0,0026667 + 0,0026667))/(672 - 10) = 0,001465
nghĩa là thêm tất cả các tần số choMCVS và trừ chúng khỏi một - bởi vì nó làkhôngMột trong số này, và chia chocòn lạiGiá trị riêng biệt. Để ý rằng không có giá trị null nên chúng tôi không phải lo lắng về những thứ kia. Số lượng hàng ước tỷ lệ kèo bóng đá 88 được tỷ lệ kèo bóng đá 88 như bình thường:
tỷ lệ kèo bóng đá 88 = 10000 * 0,001465 = 15
Hãy tăng độ phức tạp để xem xét một trường hợp có nhiều hơn hơn một điều kiện trongWHEREmệnh đề:
Giải thích Chọn * từ TENK1 trong đó độc đáo1 <1000 và StringU1 = 'xxx'; Kế hoạch truy vấn ------------------------------------------------------------------- SEQ SCAN trên TENK1 (chi phí = 0,00..495,00 tỷ lệ kèo bóng đá 88 = 2 chiều rộng = 244) Bộ lọc: ((độc đáo1 <1000) và (StringU1 = 'xxx' :: name))
17652_17771
chọn lọc = chọn lọc (độc đáo1 <1000) * chọn lọc (StringU1 = 'xxx') = 0,1031 * 0,001465 = 0,00015104
Ước tỷ lệ kèo bóng đá 88 được tính như trước:
tỷ lệ kèo bóng đá 88 = 10000 * 0,00015104 = 2
Cuối cùng chúng tôi sẽ kiểm tra một truy vấn bao gồm mộttham giacùng với AWHEREmệnh đề:
18252_18816
Hạn chế đối vớiTENK1
"độc đáo1 <50"được đánh giá trtỷ lệ kèo bóng đá 88 đó
Các vòng lặp lồng nhau tham gia. Điều này được xử lý tương tự với trtỷ lệ kèo bóng đá 88 đó
Ví dụ phạm vi. Toán tử hạn chế cho<làScalarlteqsel
như trtỷ lệ kèo bóng đá 88 đây, nhưng lần này
Giá trị 50 nằm trong thùng đầu tiên củađộc đáo1Biểu đồ:
chọn lọc = (0 + (50 - bckt [1] .min)/(bckt [1] .max - bckt [1] .min))/num_bckts = (0 + (50 - 1)/(970 - 1))/10 = 0,005057 tỷ lệ kèo bóng đá 88 = 10000 * 0,005057 = 51
Hạn chế cho sự tham gia là:
t2.Unique2 = t1.unique2
Điều này là do phương thức tham gia được lồng nhau, vớiTENK1
đang ở trong vòng lặp bên ngoài. Các
Nhà điều hành chỉ là quen thuộc của chúng tôi=Tuy nhiên
Chức năng hạn chế được lấy từOprjoinCột củapg_operator
- và làeqjoinsel
. Ngoài ra, chúng tôi sử tỷ lệ kèo bóng đá 88ng thống kê
thông tin cho cả haiTENK2
vàtenk1
:
Chọn TableName, NULL_FRAC, N_DISTINC Trong đó các tablename trong ('tenk1', 'tenk2') và attname = 'độc đáo2'; TableName | null_frac | n_distince | Hầu hết_common_vals -----------+-----------+------------+---------------------- tenk1 | 0 | -1 | tenk2 | 0 | -1 |
Trong trường hợp này không cóMCVThông tin chođộc đáo2Vì tất cả các giá trị dường như là duy nhất, vì vậy chúng ta có thể sử tỷ lệ kèo bóng đá 88ng một thuật toán chỉ dựa vào số của các giá trị riêng biệt cho cả hai mối quan hệ cùng với null của họ Phân số:
20850_21019
Đây là, trừ phần null từ một cho mỗi quan hệ và chia cho tối đa của hai giá trị riêng biệt. Số lượng hàng mà sự tham gia có khả năng phát ra được tỷ lệ kèo bóng đá 88 toán là tỷ lệ kèo bóng đá 88 chất của sản phẩm Cartesian của hai nút trong Nested-loop, nhân với độ chọn lọc:
tỷ lệ kèo bóng đá 88 = (outer_cardinality * Inside_cardinality) * chọn lọc = (51 * 10000) * 0,0001 = 51
Đối với những người quan tâm đến các chi tiết khác, ước tỷ lệ kèo bóng đá 88 của Số lượng hàng trong một mối quan hệ được bao phủ trongsrc/phụ trợ/tối ưu hóa/util/plancat.c. Các logic tỷ lệ kèo bóng đá 88 toán cho mệnh đề chọn lọc trong21735_21775. Các Việc triển khai thực tế của nhà điều hành và tham gia hạn chế Các chức năng có thể được tìm thấy trongsrc/backend/utils/adt/selfuncs.c.