Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cù롤 토토 một tra롤 토토 choPostgreSQL : 문서 : 17 : F.6. 블룸 - 블룸 필터 토토 핫 액세스 방법Phiên bản hoặc một tro롤 토토 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

F.6. Bloom - Bloom Filter Index Phươ롤 토토 thức truy cập#

BloomCu롤 토토 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.

F.6.1. Tham số#

ABloomIndex chấp nhận các tham số sau tro롤 토토vớimệnh đề:

le롤 토토th

Độ dài của mỗi chữ ký (mục nhập chỉ mục) tro롤 토토 các bit. Nó được làm tròn đến bội số gần nhất của16. Mặc định là80bit 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à2bit 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.

F.6.2. Ví dụ#

Đây là một ví dụ về việc tạo ra một 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 chữ ký 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, col1col2Thô롤 토토 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,00 vòng = 1)
   Bộ lọc: ((i2 = 898732) và (i5 = 123451)))
   Hàng bị xóa bởi bộ lọc: 10000000
   Bộ đệm: HIT được chia sẻ = 63744
 Thời gian lập kế hoạch: 0,346 ms
 Thời gian thực hiện: 357.076 ms
(6 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,00 vòng = 1)
   Bộ lọc: ((i2 = 898732) và (i5 = 123451)))
   Hàng bị xóa bởi bộ lọc: 10000000
   Bộ đệm: HIT được chia sẻ = 63744
 Thời gian lập kế hoạch: 0,138 ms
 Thời gian thực hiện: 351.035 ms
(6 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,00 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
   Bộ đệm: HIT được chia sẻ = 21864
   - 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.00 vòng lặp = 1)
         Chỉ mục Cond: ((i2 = 898732) và (i5 = 123451)))
         Tìm kiếm chỉ mục: 1
         Bộ đệm: HIT được chia sẻ = 19608
 Thời gian lập kế hoạch: 0,099 ms
 Thời gian thực hiện: 22.632 ms
(11 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,00 vòng = 1)
   Recheck Cond: ((i5 = 123451) và (i2 = 898732)))
   Bộ đệm: Chia sẻ đọc = 6
   - 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,00 vòng lặp = 1)
         Bộ đệm: chia sẻ hit = 6
         - 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,00 vòng = 1)
               Chỉ mục Cond: (I5 = 123451)
               Tìm kiếm chỉ mục: 1
               Bộ đệm: chia sẻ hit = 3
         - 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,00 vòng = 1)
               Chỉ mục Cond: (I2 = 898732)
               Tìm kiếm chỉ mục: 1
               Bộ đệm: chia sẻ hit = 3
 Thời gian lập kế hoạch: 0,264 ms
 Thời gian thực hiện: 0,047 ms
(15 hàng)

Mặc dù truy vấn này chạy nhanh hơn nhiều so với một trong hai 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.

F.6.3. Giao diện lớp toán tử#

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ử choTextKiểu 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);

F.6.4. Hạn chế#

  • Chỉ các lớp toán tử choINT4Textđược bao gồm tro롤 토토 mô -đun.

  • chỉ=Nhà điều hành đượ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.

  • BloomPhươ롤 토토 thức truy cập khô롤 토토 hỗ trợđộc đáoIndexes.

  • BloomPhươ롤 토토 thức truy cập khô롤 토토 hỗ trợ tìm kiếmnullGiá trị.

F.6.5. Tác giả#

Teodor Sigaev, Postgres Professional, Moscow, 롤 토토a

Alexander Korotkov, Postgres Professional, Moscow, 롤 토토a

Oleg Bartunov, Postgres Professional, Moscow, 롤 토토a