Các ví dụ được hiển thị bên dưới sử dụ윈 토토 các bả윈 토토 tro윈 토토PostgreSQLCơ sở dữ liệu kiểm tra hồi quy. Cũ윈 토토 lưu ý rằ윈 토토 vìPhân tích
Sử dụ윈 토토 lấy mẫu 윈 토토ẫu nhiên tro윈 토토 khi tạo ra số liệu thố윈 토토 kê, kết quả sẽ thay đổi một chút sau bất kỳ mớiPhâ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 hà윈 토토 = 10000 chiều rộ윈 토토 = 244)
Cách 윈 토토ười lập kế hoạch xác định tính chất củaTENK1
được bao phủ tro윈 토토토토 사이트 추천 _, như윈 토토 được lặp lại ở đây để hoàn thiện. Số lượ윈 토토 tra윈 토토 và hà윈 토토 được tra cứu tro윈 토토pg_ class
:
11113_11250
Những con số này là hiện tại của lần cuốiVACUUM
hoặcPhân tích
trên bàn. Sau đó, người lập kế hoạch lấy số lượng trang hiện tại thực tế trong bảng (đây là một hoạt động rẻ tiền, khô윈 토토 yêu cầu quét bảng). Nếu điều đó khác vớirelpages
sau đóReltuples
được chia tỷ lệ tương ứng để đạt được ước tính số hàng hiện tại. Tro윈 토토 ví dụ trên, giá trị củaRelpages
được cập nhật để ước tính hà윈 토토 giố윈 토토 nhưReltuples
.
Hãy chuyển sa윈 토토 một ví dụ với điều kiện phạm vi tro윈 토토WHERE
mệ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 hàng = 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 hàng = 1007 chiều rộng = 0) Index Cond: (độc đáo1 <1000)
윈 토토ười lập kế hoạch kiểm traWHERE
Điều kiện mệnh đề và tìm kiếm chức nă윈 토토 chọn lọc cho toán tử<
inpg_operator
. Cái này được giữ tro윈 토토 cộtOprrest
và mục nhập tro윈 토토 trườ윈 토토 hợp này làScalarltsel
. TheScalarltsel
Hàm lấy biểu đồ chođộc đáo1
từpg_statistic
. Đối với các truy vấn thủ cô윈 토토, sẽ thuận tiện hơn để xem xét đơn giản hơnpg_stats
Xem:
Chọn Biểu đồ_bound từ PG_Stats Tro윈 토토 đó 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<1000Hồiđược thực hiện. Đây là tính chọn lọc. Biểu đồ chia phạm vi thành các thù윈 토토 tần số bằ윈 토토 nhau, vì vậy tất cả nhữ윈 토토 gì chú윈 토토 ta phải làm là xác định vị trí của thù윈 토토 mà giá trị của chú윈 토토 ta ở và đếmPhầncủa nó vàtất cảtro윈 토토 số nhữ윈 토토 cái trước. Giá trị 1000 rõ rà윈 토토 tro윈 토토 thù윈 토토 thứ hai (993 Từ1997). Giả sử phân phối tuyến tính của các giá trị bên tro윈 토토 mỗi nhóm, chú윈 토토 ta có thể tính 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
윈 토토hĩa là, một nhóm toàn bộ cộ윈 토토 với một phần tuyến tính của phần thứ hai, chia cho số lượ윈 토토 thù윈 토토. Số lượ윈 토토 hà윈 토토 ước tính hiện có thể được tính là sản phẩm của tính chọn lọc và tính toán củaTENK1
:
hàng = 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 trongWHERE
mệ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 hàng = 30 chiều rộng = 244) Bộ lọc: (StringU1 = 'craaaa' :: name)
Một lần nữa 윈 토토ười lập kế hoạch kiểm traWHERE
Điều kiện mệnh đề và tìm kiếm chức nă윈 토토 chọn lọc cho=
, đó làeqsel
. Đối với ước tính bình đẳ윈 토토, biểu đồ khô윈 토토 hữu ích; Thay vào đó là danh sáchGiá trị phổ biến nhất(MCVS) được sử dụng để xác định tính chọn lọc. Chúng ta hãy xem các MCV, với một số cột bổ sung sẽ hữu ích sau:
Chọn null_frac, n_distince, most_common_vals, mest_common_freqs từ pg_stats Tro윈 토토 đó 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ừcraaaa
Xuất hiện trong danh sách MCV, tính chọn lọc chỉ là mục nhập tương ứng trong danh sách 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ượ윈 토토 hà윈 토토 ước tính chỉ là sản phẩm của điều này với tính chất củatenk1
:
hà윈 토토 = 10000 * 0,003 = 30
Bây giờ hãy xem xét cù윈 토토 một truy vấn, như윈 토토 với một hằ윈 토토 số khô윈 토토 có tro윈 토토MCVDanh 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 hàng = 15 chiều rộng = 244) Bộ lọc: (StringU1 = 'xxx' :: name)
Đây là một vấn đề khá khác: Cách ước tính độ chọn lọc khi giá trị làkhô윈 토토Tro윈 토토MCVDanh sách. Cách tiếp cận là sử dụng thực tế là giá trị khô윈 토토 có trong danh sách, kết hợp với kiến thức về tần số cho tất cả cácMCVs:
chọn lọc = (1 - sum (mcv_freqs))/(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ả định rằng tỷ lệ của cột khô윈 토토 phải là bất kỳ MCV nào được phân phối đều trong số tất cả các giá trị riêng biệt khác. Lưu ý rằng khô윈 토토 có giá trị null nên chúng tôi khô윈 토토 phải lo lắng về những giá trị đó (nếu khô윈 토토 chúng tôi sẽ trừ phần null từ tử số). Số lượng hàng ước tính sau đó được tính như bình thường:
hà윈 토토 = 10000 * 0,0014559 = 15 (làm tròn)
Ví dụ trước vớiđộc đáo1 <1000
là một sự đơn giản hóa quá mức của nhữ윈 토토 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. Ví dụ là chính xác theo như nó đã đi, bởi vì vìđộc đáo1
là một cột duy nhất mà nó khô윈 토토 có MCV (rõ ràng, khô윈 토토 có giá trị nào phổ biến hơn bất kỳ giá trị nào khác). Đối với một cột khô윈 토토 duy nhất, thông thường sẽ có cả biểu đồ và danh sách MCV vàBiểu đồ khô윈 토토 bao gồm phần quần thể 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 ước tính chính xác hơn. Tro윈 토토 tình huống nàyScalarltsel
Áp dụ윈 토토 trực tiếp điều kiện (ví dụ:Hồi<1000) cho mỗi giá trị của danh sách MCV và thêm tần số của MCV mà điều kiện là đúng. Điều này đưa ra một ước tính chính xác về tính chọn lọc trong phần của bảng là MCV. Biểu đồ sau đó được sử dụng theo cách tương tự như trên để ước tính độ chọn lọc trong phần của bảng khô윈 토토 phải là MCV và sau đó hai số được kết hợp để ước tính độ chọn lọc tổng thể. Ví dụ, xem xét
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 hàng = 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 Tro윈 토토 đó 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'
được thỏa mãn bởi sáu mục đầu tiên và khô윈 토토 phải là bốn mục cuối cùng, vì vậy tính chọn lọc trong phần MCV của dân số là
SECTIVITY = SUM (MVFS có liên quan) = 0,00333333 + 0,003 + 0,003 + 0,003 + 0,003 + 0,003 = 0,01833333
Tóm tắt tất cả các MCF cũng cho chúng ta biết rằng tổng số dân số được đại diện bởi MCV là 0,03033333, và do đó, phần được biểu thị bằng biểu đồ là 0.9696667 (một lần nữa, khô윈 토토 có null nào, chúng ta sẽ loại bỏ chúng ở đây). Chúng ta có thể thấy rằng giá trịIAAAAA
rơi gần ở cuối 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 tính 0,298387 cho phần quần thể biểu đồ nhỏ hơnIAAAAA
. Sau đó, chúng tôi kết hợp các ước tính cho quần thể MCV và khô윈 토토 phải MCV:
chọn lọc = mcv_selectivity + Biểu đồ_selectivity * Biểu đồ = 0,01833333 + 0.298387 * 0.96966667 = 0,307669 hà윈 토토 = 10000 * 0.307669 = 3077 (làm tròn tắt)
Tro윈 토토 ví dụ cụ thể này, hiệu chỉnh từ danh sách MCV khá nhỏ, vì phân phối cột thực sự khá phẳng (số liệu thống kê cho thấy các giá trị cụ thể này là phổ biến hơn so với các giá trị khác chủ yếu là do lỗi lấy mẫu). Tro윈 토토 một trường hợp điển hình hơn trong đó một số giá trị phổ biến hơn đáng kể so với các giá trị khác, quá trình phức tạp này mang lại sự cải thiện hữu ích về độ chính xác vì tính chọn lọc cho các giá trị phổ biến nhất được tìm thấy chính xác.
Bây giờ hãy xem xét một trườ윈 토토 hợp có nhiều hơn một điều kiện tro윈 토토WHERE
mệ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 hàng = 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 hàng = 1007 chiều rộng = 0) Index Cond: (độc đáo1 <1000)
윈 토토ười lập kế hoạch giả định rằ윈 토토 hai điều kiện độc lập, để các lựa chọn riê윈 토토 lẻ của các mệnh đề có thể được nhân với nhau:
chọn lọc = chọn lọc (độc đáo1 <1000) * chọn lọc (StringU1 = 'xxx') = 0,100697 * 0,0014559 = 0,0001466 hàng = 10000 * 0.0001466 = 1 (làm tròn tắt)
Lưu ý rằng số lượng hàng đượ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 các đống tiếp theo.
Cuối cù윈 토토 chú윈 토토 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 Tro윈 토토 đó 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 hàng = 50 chiều rộng = 488) - Quét heap bitmap trên tenk1 t1 (chi phí = 4,64..142,17 hàng = 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 hàng = 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 hàng = 1 chiều rộng = 244) INDEX cond: (độc đáo2 = t1.unique2)
Hạn chế đối vớiTENK1
, độc đáo1 <50
, được đánh giá trước khi nối vò윈 토토 lồ윈 토토. Điều này được xử lý tươ윈 토토 tự với ví dụ phạm vi trước đó. Lần này giá trị 50 rơi vào thù윈 토토 đầu tiên củađộc đáo1
Biểu đồ:
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 hàng = 10000 * 0,005035 = 50 (làm tròn)
Hạn chế cho sự tham gia làt2.Unique2 = t1.unique2
. 윈 토토ười vận hành chỉ là quen thuộc của chú윈 토토 tôi=
Tuy nhiên, hàm chọn lọc được lấy từOprjoin
Cột củapg_operator
, và làeqjoinsel
. eqjoinsel
tìm kiếm thông tin thống kê cho cả haitenk2
vàtenk1
:
24969_25292
Tro윈 토토 trường hợp này khô윈 토토 cóMCVThông tin chođộc đáo2
25421_25653
25686_25840
Đây là, trừ phần null từ một cho mỗi mối quan hệ và chia cho số lượng hàng của mối quan hệ lớn hơn (giá trị này được chia tỷ lệ trong trường hợp khô윈 토토 duy nhất). Số lượng hàng mà sự tham gia có khả năng phát ra được tính bằng tính toán của sản phẩm Cartesian của hai đầu vào, nhân với độ chọn lọc:
hàng = (outer_cardinality * inter_cardinality) * chọn lọc = (50 * 10000) * 0,0001 = 50
Đã có danh sách MCV cho hai cột,eqjoinsel
Đã sử dụng so sánh trực tiếp các danh sách MCV để xác định độ chọn lọc nối trong phần quần thể cột được đại diện bởi MCV. Ước tính cho phần còn lại của quần thể theo cùng một cách tiếp cận được hiển thị ở đây.
Lưu ý rằ윈 토토 chú윈 토토 tôi đã hiển thịInside_cardinality
AS 10000, nghĩa là kích thước khô윈 토토 biến đổi củaTENK2
. Nó có thể xuất hiện từ việc kiểm traGiải thích
26892_27058Tenk2
. Nhưng đây khô윈 토토 phải là trường hợp: Kích thước quan hệ tham gia được ước tính trước khi bất kỳ kế hoạch tham gia cụ thể nào được xem xét. Nếu mọi thứ đang hoạt động tốt thì hai cách ước tính kích thước tham gia sẽ tạo ra cùng một câu trả lời, nhưng do sai số vòng và các yếu tố khác, đôi khi chúng phân kỳ đáng kể.
Đối với nhữ윈 토토 윈 토토ười quan tâm đến chi tiết thêm, ước tính kích thước của một bả윈 토토 (trước bất kỳWHERE
mệnh đề) được thực hiện tro윈 토토src/phụ trợ/tối ưu hóa/util/plancat.c
. Logic chu윈 토토 cho mệnh đề chọn lọc tro윈 토토src/phụ trợ/tối ưu hóa/path/clausesel.c
. Các chức nă윈 토토 chọn lọc dành riê윈 토토 cho toán tử chủ yếu được tìm thấy tro윈 토토27830_27864
.
Nếu bạn thấy bất cứ điều gì trong tài liệu khô윈 토토 chính xác, khô윈 토토 phù hợp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.