亚洲精品中文字幕无码专区一,中文字幕av一区乱码深夜动态福利,粗大的内捧猛烈进出少妇

          系統城裝機大師 - 固鎮縣祥瑞電腦科技銷售部宣傳站!

          當前位置:首頁 > server > anz > 詳細頁面

          Apache Doris的Bitmap索引和BloomFilter索引使用及注意事項

          時間:2022-10-02來源:www.snowmanhill.com作者:電腦系統城

          1. Bitmap索引的使用

          1.1 Bitmap索引介紹

          bitmap index是一種位圖索引,是一種快速數據結構,能夠加快查詢速度

          1.2 Bitmap索引使用的注意事項

          使用限制

          • 目前索引僅支持bitmap類型的索引
          • bitmap索引僅在單列上創建
          • bitmap索引能夠應用在Duplicate、Uniq數據模型的所有列和Aggregate模型的key列上
          • bitmap索引僅在Segment V2儲存格式下生效。當創建index時,表的存儲格式將默認轉換為V2格式

          bitmap索引支持的數據類型:

          • TINYINT
          • SMALLINT
          • INT
          • UNSIGNEDINT
          • BIGINT
          • CHAR
          • VARCHAR
          • DATE
          • DATETIME
          • LARGEINT
          • DECIMAL
          • BOOL

          1.3 Bitmap索引的使用

          創建索引

          1
          2
          3
          4
          mysql> create index if not exists click_bitmap_index on test_db.click (user_id) using bitmap comment 'bitmap index test';
          Query OK, 0 rows affected (0.05 sec)
           
          mysql>

          查看索引

          1
          2
          3
          4
          5
          6
          7
          8
          9
          mysql> show index from test_db.click;
          +-------------------------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-------------------+
          | Table                         | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment           |
          +-------------------------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-------------------+
          | default_cluster:test_db.click |            | click_bitmap_index |              | user_id     |           |             |          |        |      | BITMAP     | bitmap index test |
          +-------------------------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-------------------+
          1 row in set (0.04 sec)
           
          mysql>

          刪除索引

          1
          2
          3
          4
          mysql> drop index if exists click_bitmap_index on test_db.click;
          Query OK, 0 rows affected (0.03 sec)
           
          mysql>

          2. BloomFilter索引

          2.1 BloomFilter索引介紹

          是一種多哈希函數映射的快速查找算法,本質上是一種位圖結構。通常應用在一些需要快速判斷某個元素是否屬于集合,但是并不嚴格要求100%正確的場合,因為BloomFilter會告訴調用者一個元素存在或不存在一個集合。但存在不一定準確

           

          2.2 BloomFilter原理

          實際上是由一個超長的二進制位數組和一系列的哈希函數組成。二進制位數組初始全部為0,當給定一個元素時,這個元素會被一系列哈希函數計算映射出一系列的值,所有的值在位數組的偏移量處置為1。而對于一個待查詢的元素,也會用相同的哈希函數映射到位數組上,只要有一個哈希函數映射沒有命中之前的元素的偏移量,則不存在于集合中

          下圖所示出一個m=18, k=3(m是該Bit數組的大小,k是Hash函數的個數)的Bloom Filter示例。集合中的x、y、z三個元素通過3個不同的哈希函數散列到位數組中。當查詢元素w時,通過Hash函數計算之后因為有一個比特為0,因此w不在該集合中

          BloomFilter

          BloomFilter索引也是以Block為粒度創建的。每個Block中,指定列的值作為一個集合生成一個BloomFilter索引條目,用于在查詢是快速過濾不滿足條件的數據

          2.3 BloomFilter索引的使用

          創建表使用BloomFilter索引

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          mysql> create table order_tb(
              -> user_id bigint,
              -> order_date date,
              -> city varchar(32),
              -> url varchar(512)
              -> ) distributed by hash(user_id, city) buckets 8
              -> properties(
              -> 'bloom_filter_columns'='user_id,order_date'
              -> );
          Query OK, 0 rows affected (0.07 sec)
           
          mysql>

          查看BloomFilter索引

          1 mysql> show create table order_tb;

          刪除BloomFilter索引

          1
          2
          3
          4
          mysql> alter table test_db.order_tb set ('bloom_filter_columns' = '');
          Query OK, 0 rows affected (0.05 sec)
           
          mysql>

          修改BloomFilter索引

          1
          2
          3
          4
          mysql> alter table test_db.order_tb set ('bloom_filter_columns' = 'user_id,city');
          Query OK, 0 rows affected (0.05 sec)
           
          mysql>

          2.4 Doris BloomFilter使用場景

          • 首先BloomFilter適用于非前綴過濾
          • 查詢會根據該列高頻過濾,而且查詢條件大多是in和=過濾
          • 不同于Bitmap, BloomFilter適用于高基數列。比如UserID。因為如果創建在低基數的列上,比如”性別“列,則每個Block幾乎都會包含所有取值,導致BloomFilter索引失去意義

          2.5 Doris BloomFilter使用注意事項

          • 不支持對Tinyint、Float、Double 類型的列建Bloom Filter索引
          • Bloom Filter索引只對in和=過濾查詢有加速效果
          • 如果要查看某個查詢是否命中了Bloom Filter索引,可以通過查詢的Profile信息查看
          分享到:

          相關信息

          系統教程欄目

          欄目熱門教程

          人氣教程排行

          站長推薦

          熱門系統下載

          亚洲精品中文字幕无码专区一,中文字幕av一区乱码深夜动态福利,粗大的内捧猛烈进出少妇