PostgreSQL 9.3.25 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 60. Người lập kế hoạch sử dụng số liệu thống kê | Tiếp theo |
Các ví dụ được hiển thị bên dưới sử dụng các bảng trongPostgreSQLCơ sở dữ liệu kiểm tra hồi quy. Các Đầu ra hiển thị được lấy từ phiên bản 8.3. Hành vi của sớm hơn (Hoặc sau này) Các phiên bản có thể khác nhau. Cũng lưu ý rằng vìPhân tíchSử dụng lấy mẫu ngẫu nhiên trong khi sản xuất Thống kê, kết quả sẽ thay đổi một chút sau bất kỳ mới nàoPhân tích.
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..458.00 kèo bóng đá việt nam = 10000 chiều rộng = 244)
Cách người lập kế hoạch xác định kèo bóng đá việt nam chất củaTenk110789_10806Phần 14.2, nhưng được lặp lại ở đây cho hoàn chỉnh. Số lượng trang và kèo bóng đá việt nam được tra cứu trongpg_ class:
11006_11142
Những con số này là hiện tại của lần cuốiNút húthoặcPhân tíchTrên bàn. Người lập kế hoạch sau đó lấy số lượng trang hiện tại thực tế trong bảng (đây là một hoạt động rẻ, không yêu cầu một bảng quét). Nếu điều đó khác vớiRelpagessau đóReltuplesđược chia tỷ lệ tương ứng để đến Ước tính số lượng kèo bóng đá việt nam hiện tại. Trong ví dụ trên, giá trị củaRelpagesđược cập nhật để các kèo bóng đá việt nam ước tính giống nhưReltuples.
Hãy chuyển sang một ví dụ với điều kiện phạm vi trongWHEREmệnh đề:
Giải thích Chọn * từ Tenk1 trong đó độc đáo1 <1000; Kế hoạch truy vấn ------------------------------------------------------------------------------------------------------ Quét heap bitmap trên TENK1 (chi phí = 24,06..394.64 kèo bóng đá việt nam = 1007 chiều rộng = 244) RECHECK COND: (độc đáo1 <1000) - Quét chỉ mục bitmap trên TENK1_UNIQUE1 (chi phí = 0,00..23,80 kèo bóng đá việt nam = 1007 chiều rộng = 0) Index Cond: (độc đáo1 <1000)
Người lập kế hoạch kiểm traWHEREmệnh đề
điều kiện và tìm kiếm chức năng chọn lọc cho toán tử<inpg_operator. Cái này được giữ trong cộtOprrestvà mục nhập trong trường hợp này làScalarltsel
. TheScalarltsel
Hàm lấy biểu đồ chođộc đáo1từpg_statistic. Đối với các truy vấn thủ công, nó là nhiều hơn
thuận tiện để xem xét đơn giản hơnpg_statsXem:
Chọn Biểu đồ_bound từ PG_Stats Trong đó tablename = 'tenk1' và attname = 'độc đáo1'; Biểu đồ_bound ------------------------------------------------------------------ 0,993,1997,3050,4040,5036.5957,7057,8029,9016,9995
Tiếp theo tỷ lệ của biểu đồ bị chiếm bởi"<1000"được thực hiện. Đây là kèo bóng đá việt nam chọn lọc. Biểu đồ chia phạm vi thành các thùng tần số bằng nhau, vì vậy Tất cả những gì chúng ta phải làm là xác định vị trí xô mà giá trị của chúng ta đang ở và đếmPhầncủa nó vàtất cảtrong số những cái trước. Giá trị 1000 rõ ràng trong thùng thứ hai (993-1997). Giả định phân phối tuyến kèo bóng đá việt nam của các giá trị bên trong mỗi thùng, chúng ta có thể kèo bóng đá việt nam toán độ chọn lọc là:
chọn lọc = (1 + (1000 - xô [2] .min)/(xô [2] .max - xô [2] .min))/num_buckets = (1 + (1000 - 993)/(1997 - 993))/10 = 0.100697
13938_14146TENK1:
kèo bóng đá việt nam = rel_cardinality * chọn lọc = 10000 * 0.100697 = 1007 (làm tròn)
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 = 'craaaa'; Kế hoạch truy vấn ---------------------------------------------------------------------- SEQ SCAN trên TENK1 (chi phí = 0,00..483.00 kèo bóng đá việt nam = 30 chiều rộng = 244) Bộ lọc: (StringU1 = 'craaaa' :: name)
Một lần nữa người lập kế hoạch kiểm traWHEREĐiều kiện mệnh đề và tìm kiếm chức năng chọn lọc cho=, đó làeqsel
. Để ước kèo bóng đá việt nam bình đẳng, biểu đồ là
không hữu ích; Thay vào đó là danh sáchphổ biến nhất
Giá trị(MCVs) được sử dụng để
Xác định kèo bóng đá việt nam chọn lọc. Chúng ta hãy xem các MCV, với một số
các cột bổ sung sẽ hữu ích sau:
Chọn null_frac, n_distince, most_common_vals, mest_common_freqs từ pg_stats Trong đó tablename = 'tenk1' và attname = 'StringU1'; null_frac | 0 n_distince | 676 Hầu hết_common_vals | Ejaaaa, bbaaaa, craaaa, fcaaaa, feaaaa, gsaaaa, joaaaa, mcaaaa, naaaaa, wgaaaa
kể từcraaaaxuất hiện trong danh sách MCV, kèo bóng đá việt nam chọn lọc chỉ là mục tương ứng trong danh sách của các tần số phổ biến nhất (MCFs):
Chọn lọc = MCF [3] = 0,003
Như trước đây, số lượng kèo bóng đá việt nam ước tính chỉ là sản phẩm của cái này với tính chất củaTENK1:
kèo bóng đá việt nam = 10000 * 0,003 = 30
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 có trong TheMCVDanh sách:
Giải thích Chọn * từ Tenk1 trong đó StringU1 = 'XXX'; Kế hoạch truy vấn ---------------------------------------------------------------------- SEQ SCAN trên TENK1 (chi phí = 0,00..483.00 kèo bóng đá việt nam = 15 chiều rộng = 244) Bộ lọc: (StringU1 = 'xxx' :: name)
Đây là một vấn đề khá khác: Cách ước kèo bóng đá việt nam chọn lọc khi giá trị làkhôngtrongMCV16633_16771MCVS:
chọn lọc = (1 - sum (mvf))/(num_distince - num_mcv) = (1 - (0,00333333 + 0,003 + 0,003 + 0,003 + 0,003 + 0,003 + 0,003 + 0,003 + 0,003 + 0,003))/(676 - 10) = 0,0014559
nghĩa là thêm tất cả các tần số choMCVS và trừ chúng khỏi một, sau đó chia cho Số lượngkhácGiá trị riêng biệt. Số tiền này để giả sử rằng phần của cột không phải là bất kỳ MCV nào được phân phối đồng đều trong số tất cả các giá trị khác biệt khác. Lưu ý rằng không có giá trị null nên Chúng tôi không phải lo lắng về những điều đó (nếu không chúng tôi sẽ trừ đi Phân số null từ tử số là tốt). Số lượng ước tính của kèo bóng đá việt nam sau đó được tính như bình thường:
kèo bóng đá việt nam = 10000 * 0,0014559 = 15 (làm tròn)
Ví dụ trkèo bóng đá việt nam vớiĐộc đáo1 <
1000là một sự đơn giản hóa quá mức của những gìScalarltsel
Thực sự; Bây giờ chúng ta đã thấy một
Ví dụ về việc sử dụng MCV, chúng ta có thể điền vào một số chi tiết hơn. Các
Ví dụ là chính xác theo như nó đã đi, bởi vì vìđộc đáo1là một cột duy nhất mà nó không có MCVS
(Rõ ràng, không có giá trị nào là phổ biến hơn bất kỳ giá trị nào khác). Vì
một cột không đơn vị, thường sẽ có cả biểu đồ và
Danh sách MCV vàBiểu đồ không
không bao gồm phần dân số cột được đại diện bởi
MCVS. Chúng tôi làm mọi thứ theo cách này bởi vì nó cho phép chính xác hơn
Ước kèo bóng đá việt nam. Trong tình huống nàyScalarltsel
Áp dụng trực tiếp điều kiện (ví dụ:"<1000"18575_18999
Giải thích Chọn * từ Tenk1 trong đó StringU1 <'IAAAAA'; Kế hoạch truy vấn -------------------------------------------------------------------- SEQ SCAN trên TENK1 (chi phí = 0,00..483.00 kèo bóng đá việt nam = 3077 chiều rộng = 244) Bộ lọc: (StringU1 <'IAAAAA' :: name)
Chúng ta đã thấy thông tin MCV choStringU1, Và đây là biểu đồ của nó:
Chọn Biểu đồ_Bound từ PG_Stats Trong đó tablename = 'tenk1' và attname = 'StringU1'; Biểu đồ_bound ------------------------------------------------------------------------------------------------------ Aaaaaa, cqaaaa, fraaaa, ibaaaa, kraaaa, nfaaaa, psaaaa, sgaaaa, vaaaaa, xlaaaa, zzaaaa
Kiểm tra danh sách MCV, chúng tôi thấy rằng điều kiệnStringU1 <'IAAAAA'19840_19963
Chọn lọc = Sum (MVFS có liên quan) = 0,00333333 + 0,003 + 0,003 + 0,003 + 0,003 + 0,003 = 0,01833333
Tóm lại tất cả các MCF cũng cho chúng ta biết rằng tổng số phần của dân số được đại diện bởi MCV là 0,03033333, và do đó Phân số được biểu thị bằng biểu đồ là 0,9696667 (một lần nữa, ở đó là không có null, nếu không chúng ta phải loại trừ chúng ở đây). Chúng ta có thể thấy rằng giá trịIAAAAAThác gần cuối của nhóm biểu đồ thứ ba. Sử dụng một số giả định khá nhảm nhí về tần suất của các ký tự khác nhau, người lập kế hoạch đến Ước kèo bóng đá việt nam 0,298387 cho phần dân số biểu đồ ít hơnIAAAAA. Sau đó chúng tôi kết hợp Các ước kèo bóng đá việt nam cho quần thể MCV và không phải MCV:
chọn lọc = mcv_selectivity + Biểu đồ = 0,01833333 + 0.298387 * 0.96966667 = 0,307669 kèo bóng đá việt nam = 10000 * 0.307669 = 3077 (làm tròn tắt)
Trong ví dụ cụ thể này, hiệu chỉnh từ danh sách MCV là khá nhỏ, bởi vì phân phối cột thực sự khá phẳng (các số liệu thống kê hiển thị các giá trị cụ thể này là nhiều hơn Thông thường hơn những người khác chủ yếu là do lỗi lấy mẫu). Trong một nhiều hơn trường hợp điển hình trong đó một số giá trị phổ biến hơn đáng kể những người khác, quá trình phức tạp này mang lại sự cải thiện hữu ích trong Độ chính xác vì kèo bóng đá việt nam chọn lọc cho các giá trị phổ biến nhất là tìm thấy chính xác.
Bây giờ hãy xem xét một trường hợp có nhiều đ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 ------------------------------------------------------------------------------------------------------ Quét heap bitmap trên TENK1 (chi phí = 23,80..396.91 kèo bóng đá việt nam = 1 chiều rộng = 244) RECHECK COND: (độc đáo1 <1000) Bộ lọc: (StringU1 = 'xxx' :: name) - Quét chỉ mục bitmap trên TENK1_UNIQUE1 (chi phí = 0,00..23,80 kèo bóng đá việt nam = 1007 chiều rộng = 0) Index Cond: (độc đáo1 <1000)
Người lập kế hoạch giả định rằng hai điều kiện là độc lập, vì vậy rằng các chọn lọc riêng lẻ của các mệnh đề có thể được nhân lên cùng nhau:
chọn lọc = chọn lọc (độc đáo1 <1000) * chọn lọc (StringU1 = 'xxx') = 0,100697 * 0,0014559 = 0,0001466 kèo bóng đá việt nam = 10000 * 0.0001466 = 1 (làm tròn tắt)
Lưu ý rằng số lượng kèo bóng đá việt nam được ước tính sẽ được trả về từ Quét chỉ số bitmap chỉ phản ánh điều kiện được sử dụng với chỉ mục; Điều này rất quan trọng vì nó ảnh hưởng đến ước tính chi phí cho HEAP tiếp theo tìm nạp.
Cuối cùng chúng tôi sẽ kiểm tra một truy vấn liên quan đến tham gia:
Giải thích Chọn * Từ Tenk1 T1, Tenk2 T2 Trong đó t1.Unique1 <50 và t1.Unique2 = t2.unique2; Kế hoạch truy vấn -------------------------------------------------------------------------------------------------- Vòng lặp lồng nhau (chi phí = 4,64..456,23 kèo bóng đá việt nam = 50 chiều rộng = 488) - Quét heap bitmap trên tenk1 t1 (chi phí = 4,64..142,17 kèo bóng đá việt nam = 50 chiều rộng = 244) RECHECK COND: (Độc đáo1 <50) - Quét chỉ số bitmap trên TENK1_UNIQUE1 (chi phí = 0,00..4,63 kèo bóng đá việt nam = 50 chiều rộng = 0) Index Cond: (độc đáo1 <50) - Quét chỉ mục bằng TENK2_UNIQUE2 trên TENK2 T2 (chi phí = 0,00..6.27 kèo bóng đá việt nam = 1 chiều rộng = 244) INDEX cond: (độc đáo2 = t1.unique2)
Hạn chế trênTENK1, độc đáo1 <50, được đánh giá trkèo bóng đá việt nam vòng lặp lồng nhau tham gia. Điều này được xử lý tương tự với ví dụ phạm vi trkèo bóng đá việt nam đó. Lần này giá trị 50 rơi vào thùng đầu tiên củađộc đáo123777_23790
chọn lọc = (0 + (50 - xô [1] .min)/(xô [1] .max - xô [1] .min))/num_buckets = (0 + (50 - 0)/(993 - 0))/10 = 0,005035 kèo bóng đá việt nam = 10000 * 0,005035 = 50 (làm tròn)
Hạn chế cho sự tham gia làT2.Unique2 =
t1.unique2. Người vận hành chỉ là quen thuộc của chúng tôi=Tuy nhiên, chức năng chọn lọc được lấy từ
TheOprjoinCột củapg_operator24332_24343eqjoinsel
. eqjoinsel
Xem lên thông tin thống kê
cho cả haiTENK2vàTENK1:
24576_24898
Trong trường hợp này không cóMCVThông tin chođộc đáo2Vì tất cả các giá trị có vẻ là duy nhất, vì vậy chúng tôi sử dụng một thuật toán dựa trên Chỉ về số lượng các giá trị riêng biệt cho cả hai mối quan hệ cùng nhau với các phân số null của họ:
25227_25392
Đây là, trừ phần null từ một cho mỗi quan hệ và chia cho tối đa các số lượng khác biệt giá trị. Số lượng kèo bóng đá việt nam mà sự tham gia có khả năng phát ra là được tính là tính chất của sản phẩm cartesian của hai Đầu vào, nhân với độ chọn lọc:
kèo bóng đá việt nam = (outer_cardinality * Inside_cardinality) * chọn lọc = (50 * 10000) * 0,0001 = 50
Đã có danh sách MCV cho hai cột,eqjoinsel
25920_26162
Lưu ý rằng chúng tôi đã hiển thịInside_cardinalityAS 10000, nghĩa là kích thkèo bóng đá việt nam không biến đổi củaTENK2. Nó có thể xuất hiện từ việc kiểm traGiải thíchđầu ra ước tính tham gia kèo bóng đá việt nam đến từ 50 * 1, nghĩa là số lượng kèo bóng đá việt nam bên ngoài nhân Số lượng kèo bóng đá việt nam ước tính thu được từ mỗi lần quét chỉ mục bên trong trêntenk2. Nhưng đây không phải là trường hợp: Kích thước quan hệ tham gia được ước kèo bóng đá việt nam trước khi bất kỳ kế hoạch tham gia cụ thể nào có đã được xem xét. Nếu mọi thứ đang hoạt động tốt thì hai cách Ước kèo bóng đá việt nam kích thước tham gia sẽ tạo ra cùng một câu trả lời, nhưng Do lỗi nghỉ và các yếu tố khác mà đôi khi chúng phân kỳ đáng kể.
Đối với những người quan tâm đến chi tiết hơn, ước kèo bóng đá việt nam kích thước của một bảng (trước bất kỳWHEREmệnh đề) là Xong trongsrc/phụ trợ/tối ưu hóa/util/plancat.c. Chung chung logic cho điều khoản chọn lọc là trongsrc/phụ trợ/tối ưu hóa/path/clausesel.c. Các Các chức năng chọn lọc cụ thể của người vận hành hầu hết được tìm thấy trong.