Bloom
Cu토토 베이 cấp phươ토토 베이 thức truy cập chỉ mục dựa trênBộ lọc Bloom.
Bộ lọc Bloom là cấu trúc dữ liệu hiệu quả không gian được sử dụng để kiểm tra xem một phần tử có phải là thành viên của một bộ hay không. Trong trường hợp phương thức truy cập chỉ mục, nó cho phép loại trừ nhanh các bộ dữ liệu không phù hợp thông qua các chữ ký có kích thước được xác định khi tạo chỉ mục.
Chữ ký là một đại diện mất mát của (các) thuộc tính được lập chỉ mục, và như vậy có xu hướ토토 베이 báo cáo dươ토토 베이 tính giả; Đó là, có thể được báo cáo rằ토토 베이 một yếu tố nằm tro토토 베이 tập hợp, khi nó khô토토 베이. Vì vậy, kết quả tìm kiếm chỉ mục phải luôn được kiểm tra lại bằ토토 베이 cách sử dụ토토 베이 các giá trị thuộc tính thực tế từ mục nhập đố토토 베이. Chữ ký lớn hơn làm giảm tỷ lệ dươ토토 베이 tính giả và do đó làm giảm số lần truy cập heap vô dụ토토 베이, như토토 베이 tất nhiên cũ토토 베이 làm cho chỉ số lớn hơn và do đó chậm hơn để quét.
Loại chỉ mục này hữu ích nhất khi bảng có nhiều thuộc tính và truy vấn kiểm tra các kết hợp tùy ý của chúng. Chỉ số Btree truyền thống nhanh hơn chỉ số Bloom, nhưng nó có thể yêu cầu nhiều chỉ mục Btree để hỗ trợ tất cả các truy vấn có thể có trong đó người ta chỉ cần một chỉ số Bloom duy nhất. Tuy nhiên, lưu ý rằng các chỉ mục Bloom chỉ hỗ trợ các truy vấn bình đẳng, trong khi các chỉ mục Btree cũng có thể thực hiện các tìm kiếm bất bình đẳng và phạm vi.
ABloom
Index chấp nhận các tham số sau tro토토 베이với
mệnh đề:
le토토 베이th
Độ dài của mỗi chữ ký (mục nhập chỉ mục) theo bit. Nó được làm tròn đến bội số gần nhất của16
. Mặc định là80
bit và tối đa là4096
.
col1 - col32
Số lượng bit được tạo cho mỗi cột chỉ mục. Tên của mỗi tham số đề cập đến số lượng cột chỉ mục mà nó kiểm soát. Mặc định là2
bit và tối đa là4095
. Tham số cho các cột chỉ mục khô토토 베이 thực sự được sử dụ토토 베이 bị bỏ qua.
Đây là một ví dụ về việc tạo chỉ mục nở hoa:
Tạo chỉ mục bloomidx trên tbloom bằng Bloom (I1, I2, I3) Với (le토토 베이th = 80, col1 = 2, col2 = 2, col3 = 4);
Chỉ mục được tạo với độ dài đặc trưng là 80 bit, với các thuộc tính i1 và i2 được ánh xạ tới 2 bit và thuộc tính i3 được ánh xạ tới 4 bit. Chúng ta có thể đã bỏ quale토토 베이th
, col1
vàcol2
Thô토토 베이 số kỹ thuật vì chú토토 베이 có giá trị mặc định.
Đây là một ví dụ đầy đủ hơn về định nghĩa và cách sử dụng chỉ số Bloom, cũng như so sánh với các chỉ mục Btree tương đương. Chỉ số Bloom nhỏ hơn đáng kể so với chỉ số Btree và có thể hoạt động tốt hơn.
=# Tạo bả토토 베이 TBLOOM AS LỰA CHỌN (토토 베이ẫu nhiên () * 1000000) :: int as i1, (토토 베이ẫu nhiên () * 1000000) :: int as i2, (토토 베이ẫu nhiên () * 1000000) :: int as i3, (토토 베이ẫu nhiên () * 1000000) :: int as i4, (토토 베이ẫu nhiên () * 1000000) :: int as i5, (토토 베이ẫu nhiên () * 1000000) :: int as i6 TỪ Generate_Series (1.10000000); Chọn 10000000
Quét tuần tự trên bả토토 베이 lớn này mất nhiều thời gian:
=# Giải thích Phân tích Chọn * từ tbloom trong đó i2 = 898732 và I5 = 123451; Kế hoạch truy vấn ----------------------------------------------------------------------- --------------------------------------- Quét SEQ trên tbloom (chi phí = 0,00..213744.00 hàng = 250 chiều rộng = 24) (thời gian thực tế = 357.059..357.059 hàng = 0 vòng = 1) Bộ lọc: ((i2 = 898732) và (i5 = 123451))) Hàng bị xóa bởi bộ lọc: 10000000 Thời gian lập kế hoạch: 0,346 ms Thời gian thực hiện: 357.076 ms (5 hàng)
Ngay cả với chỉ số Btree được xác định, kết quả vẫn sẽ là lần quét tuần tự:
=# Tạo chỉ mục btreeidx trên tbloom (i1, i2, i3, i4, i5, i6); Tạo chỉ mục =# Chọn pg_size_pretty (pg_relation_size ('btreeidx')); pg_size_pretty ---------------- 386 MB (1 hàng) =# Giải thích Phân tích Chọn * từ tbloom trong đó i2 = 898732 và I5 = 123451; Kế hoạch truy vấn ----------------------------------------------------------------------- --------------------------------------- Quét SEQ trên tbloom (chi phí = 0,00..213744.00 hàng = 2 chiều rộng = 24) (thời gian thực tế = 351.016..351.017 hàng = 0 vòng = 1) Bộ lọc: ((i2 = 898732) và (i5 = 123451))) Hàng bị xóa bởi bộ lọc: 10000000 Thời gian lập kế hoạch: 0,138 ms Thời gian thực hiện: 351.035 ms (5 hàng)
Có chỉ mục Bloom được xác định trên bảng tốt hơn Btree trong việc xử lý loại tìm kiếm này:
=# Tạo chỉ mục bloomidx trên tbloom bằng Bloom (I1, I2, I3, I4, I5, I6); Tạo chỉ mục =# Chọn pg_size_pretty (pg_relation_size ('bloomidx')); pg_size_pretty ---------------- 153 MB (1 hàng) =# Giải thích Phân tích Chọn * từ tbloom trong đó i2 = 898732 và I5 = 123451; Kế hoạch truy vấn ----------------------------------------------------------------------- ---------------------------------------------------------- Quét heap bitmap trên tbloom (chi phí = 1792.00..1799,69 hàng = 2 chiều rộng = 24) (thời gian thực tế = 22.605..22.606 hàng = 0 vòng = 1) Recheck Cond: ((i2 = 898732) và (i5 = 123451))) Hàng bị xóa bằng cách kiểm tra lại chỉ mục: 2300 Khối heap: Chính xác = 2256 - Quét chỉ số bitmap trên bloomidx (chi phí = 0,00..178436.00 hàng = 1 chiều rộng = 0) (thời gian thực tế = 20.005..20.005 hàng = 2300 vòng = 1) Chỉ mục Cond: ((i2 = 898732) và (i5 = 123451))) Thời gian lập kế hoạch: 0,099 ms Thời gian thực hiện: 22.632 ms (8 hàng)
Bây giờ, vấn đề chính với tìm kiếm Btree là Btree không hiệu quả khi các điều kiện tìm kiếm không hạn chế (các) cột chỉ mục hàng đầu. Một chiến lược tốt hơn cho BTREE là tạo một chỉ mục riêng biệt trên mỗi cột. Sau đó, người lập kế hoạch sẽ chọn một cái gì đó như thế này:
=# Tạo chỉ mục btreeidx1 trên tbloom (i1); Tạo chỉ mục =# Tạo chỉ mục BtreeIdx2 trên tbloom (i2); Tạo chỉ mục =# Tạo chỉ mục BTreeIdx3 trên tbloom (i3); Tạo chỉ mục =# Tạo chỉ mục BtreeIdx4 trên tbloom (i4); Tạo chỉ mục =# Tạo chỉ mục BTreeIdx5 trên tbloom (i5); Tạo chỉ mục =# Tạo chỉ mục BtreeIdx6 trên tbloom (i6); Tạo chỉ mục =# Giải thích Phân tích Chọn * từ tbloom trong đó i2 = 898732 và I5 = 123451; Kế hoạch truy vấn ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Quét heap bitmap trên tbloom (chi phí = 9,29..13,30 hàng = 1 chiều rộng = 24) (thời gian thực tế = 0,032..0.033 hàng = 0 vòng = 1) Recheck Cond: ((i5 = 123451) và (i2 = 898732))) - bitmapand (chi phí = 9,29..9,29 hàng = 1 chiều rộng = 0) (thời gian thực tế = 0,047..0.047 hàng = 0 vòng = 1) - Quét chỉ số bitmap trên btreeidx5 (chi phí = 0,00..4,52 hàng = 11 chiều rộng = 0) (thời gian thực tế = 0,026..0.026 hàng = 7 vòng = 1) Chỉ mục Cond: (I5 = 123451) - Quét chỉ số bitmap trên btreeidx2 (chi phí = 0,00..4,52 hàng = 11 chiều rộng = 0) (thời gian thực tế = 0,007..0.007 hàng = 8 vòng = 1) Chỉ mục Cond: (I2 = 898732) Thời gian lập kế hoạch: 0,264 ms Thời gian thực hiện: 0,047 ms (9 hàng)
Mặc dù truy vấn này chạy nhanh hơn nhiều so với một trong các chỉ mục duy nhất, chúng tôi phải trả một hình phạt về kích thước chỉ mục. Mỗi chỉ số Btree một cột đơn chiếm 88,5 MB, do đó, tổng dung lượng cần thiết là 531 MB, trên ba lần không gian được sử dụng bởi Chỉ số Bloom.
Một lớp toán tử cho các chỉ mục Bloom chỉ yêu cầu hàm băm cho kiểu dữ liệu được lập chỉ mục và toán tử bình đẳng để tìm kiếm. Ví dụ này hiển thị định nghĩa lớp toán tử choText
Loại dữ liệu:
Tạo lớp toán tử Text_ops Mặc định cho loại văn bản sử dụng Bloom là Toán tử 1 = (văn bản, văn bản), Hàm 1 hashtext (văn bản);
Chỉ các lớp toán tử choINT4
vàText
được bao gồm tro토토 베이 mô -đun.
chỉ=
toán tử được hỗ trợ tìm kiếm. Nhưng có thể thêm hỗ trợ cho các mảng với các hoạt động liên minh và giao lộ trong tương lai.
Bloom
Phươ토토 베이 thức truy cập khô토토 베이 hỗ trợđộc đáo
indexes.
Bloom
Phươ토토 베이 thức truy cập khô토토 베이 hỗ trợ tìm kiếmnull
Giá trị.
Teodor Sigaev<teodor@postgrespro.ru
, Postgres Professional, Moscow, 토토 베이a
Alexander Korotkov<a.korotkov@postgrespro.ru
, Postgres Professional, Moscow, 토토 베이a
Oleg Bartunov<Obartunov@postgrespro.ru
, Postgres Professional, Moscow, 토토 베이a
Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không 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.