Apache Doris的Bitmap索引和BloomFilter索引使用及注意事項
1. Bitmap索引的使用
1.1位圖索引簡介
位圖索引是位圖索引,一種快速的數據結構,可以加快查詢速度。
1.2使用位圖索引的注意事項
使用限制:
目前索引僅支持bitmap類型的索引bitmap索引僅在單列上創建bitmap索引能夠應用在Duplicate、Uniq數據模型的所有列和Aggregate模型的key列上bitmap索引僅在Segment V2儲存格式下生效。當創建index時,表的存儲格式將默認轉換為V2格式位圖索引支持的數據類型:
TINYINTSMALLINTINTUNSIGNEDINTBIGINTCHARVARCHARDATEDATETIMELARGEINTDECIMALBOOL1.3位圖索引的使用
創建索引
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>查看索引
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>刪除索引
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布隆過濾器指數簡介
它是一種多哈希函數映射的快速查找算法,本質上是一種位圖結構。通常用于一些需要快速判斷一個元素是否屬于某個集合,但并不嚴格要求100%正確的場合,因為BloomFilter會告訴調用者某個元素在某個集合中存在還是不存在。但存在不一定準確。
2.2布隆過濾器的原理
實際上,它由一個超長的二進制位數組和一系列哈希函數組成。二進制位數組最初全是零。當給定一個元素時,它會被一系列哈希函數映射成一系列值,位數組中所有值的偏移量都被當作1。對于要查詢的元素,將使用相同的哈希函數將其映射到位數組。只要有一個哈希函數沒有映射前一個元素的偏移量,它就不存在于集合中。
下圖是m = 18,k = 3 (m是位數組的大小,k是哈希函數的個數)的Bloom Filter的例子。集合中的x、y和z元素由三個不同的散列函數散列到一個位數組中。當查詢元素W時,它不在集合中,因為通過哈希函數計算后有一位為0。
BloomFilter索引也是以塊粒度創建的。在每個塊中,指定列的值用作一個集合來生成BloomFilter索引條目,該條目用于快速篩選不符合查詢條件的數據。
2.3布隆過濾器指數的使用
使用BloomFilter索引創建表
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索引
mysql> show create table order_tb;刪除BloomFilter索引
mysql> alter table test_db.order_tb set ('bloom_filter_columns' = '');Query OK, 0 rows affected (0.05 sec)mysql>修改BloomFilter索引
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使用多麗絲布魯姆過濾器的注意事項
不支持對Tinyint、Float、Double 類型的列建Bloom Filter索引Bloom Filter索引只對in和=過濾查詢有加速效果如果要查看某個查詢是否命中了Bloom Filter索引,可以通過查詢的Profile信息查看關于Apache Doris的位圖索引和BloomFilter索引的使用,本文到此結束。關于Apache Doris index的更多信息,請搜索Script House之前的文章或者繼續瀏覽下面的相關文章。希望大家以后多多支持劇本之家!
如果您的問題還未解決可以聯系站長付費協助。

有問題可以加入技術QQ群一起交流學習
本站vip會員 請加入無憂模板網 VIP群(50604020) PS:加入時備注用戶名或昵稱
普通注冊會員或訪客 請加入無憂模板網 技術交流群(50604130)
客服微信號:15898888535
聲明:本站所有文章資源內容,如無特殊說明或標注,均為采集網絡資源。如若內容侵犯了原著者的合法權益,可聯系站長刪除。