網站首頁 編程語言 正文
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索引的使用
創建索引
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 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索引也是以Block為粒度創建的。每個Block中,指定列的值作為一個集合生成一個BloomFilter索引條目,用于在查詢是快速過濾不滿足條件的數據
2.3 BloomFilter索引的使用
創建表使用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 Doris BloomFilter使用注意事項
- 不支持對Tinyint、Float、Double 類型的列建Bloom Filter索引
- Bloom Filter索引只對in和=過濾查詢有加速效果
- 如果要查看某個查詢是否命中了Bloom Filter索引,可以通過查詢的Profile信息查看
原文鏈接:https://blog.csdn.net/yy8623977/article/details/126211770
相關推薦
- 2022-05-19 聊聊Python代碼中if?__name__?==?‘__main__‘的作用是什么_python
- 2023-11-13 matplotlib按照論文要求繪圖并保存pdf格式
- 2022-10-04 Nginx?502?bad?gateway錯誤解決的九種方案及原因_nginx
- 2022-07-08 C#中的圖像Image類與打印Printing類用法_C#教程
- 2022-12-22 Flutter組件開發過程完整講解_Android
- 2022-06-02 C語言實現簡單的抽獎系統_C 語言
- 2022-05-31 Python中的變量及簡單數據類型應用_python
- 2022-04-23 實現一個內容超出顯示省略號,并鼠標浮入顯示tooltip,不超出的不顯示tooltip組件
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支