文章目录
Doris的Bitmap索引介绍
一、Bitmap位图索引原理
二、Bitmap位图索引语法
三、注意事项
Doris的Bitmap索引介绍
一、Bitmap位图索引原理
bitmap,位图,是一种数据结构,即bit的集合,每一个bit记录0或者1,代表状态。bitmap index是位图索引,可以针对Doris表中的某些列构建位图索引来加快数据查询速度。
位图索引原理如下,假设我们有一张表数据如下,现有5行数据:
现在需要从表中找出性别列为"男",城市列是"上海"的数据,如果表中没有索引,这就需要扫描一行行数据判断是否满足指定条件来过滤数据。
如果在"性别"列上创建了位图索引,对于性别这个列及每行数据位置会形成两个向量,即:男(10101),女(01010)
如果也在"城市"列上建立了位图索引,那么对于"城市"列位图索引会生成三个向量,即:北京(10010),深圳(00100),上海(01001)
如果我们现在想要查询性别列为"男",城市列是"上海"的数据,只需要取出男(10101)和上海(01001)两个向量进行and操作,结果生成(00001)向量,就代表(00001)向量中位置为1的位置符合条件,即表中第5行数据使我们需要的数据,提高了查询速度。
二、Bitmap位图索引语法
下面创建表来演示Bitmap位图索引用法,创建表 example_db.example_bitmap_index_tbl ,SQL语句如下:
CREATE TABLE IF NOT EXISTS example_db.example_bitmap_index_tbl
(
`id` BIGINT NOT NULL COMMENT "用户id",
`age` INT COMMENT "用户年龄",
`name` VARCHAR(100) NOT NULL COMMENT "姓名",
`cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费"
)
DISTRIBUTED BY HASH(`id`) BUCKETS 3
PROPERTIES
(
"replication_allocation" = "tag.location.default: 1"
);
- 创建索引
创建索引语法如下:
CREATE INDEX [IF NOT EXISTS] index_name ON table (某一个列) USING BITMAP COMMENT '注释';
对表 example_db.example_bitmap_index_tbl 中age列添加位图索引:
mysql> CREATE INDEX age_index ON example_db.example_bitmap_index_tbl (age) USING BITMAP COMMENT '年龄索引';
Query OK, 0 rows affected (0.10 sec)
- 查看索引
查看索引语法如下,该语句用于展示一个表中索引的相关信息,目前只支持bitmap 索引。
SHOW INDEX FROM example_db.table_name;
查看 example_db.example_bitmap_index_tbl 中的位图索引:
mysql> show index from example_db.example_bitmap_index_tbl\G;
*************************** 1. row ***************************
Table: default_cluster:example_db.example_bitmap_index_tbl
Non_unique:
Key_name: age_index
Seq_in_index:
Column_name: age
Collation:
Cardinality:
Sub_part:
Packed:
Null:
Index_type: BITMAP
Comment: 年龄索引
Properties:
1 row in set (0.00 sec)
- 删除索引
删除指定table_name的位图索引,命令如下:
DROP INDEX [IF EXISTS] index_name ON [db_name.]table_name;
删除表example_db.example_bitmap_index_tbl中的位图索引:
mysql> DROP INDEX age_index ON example_db.example_bitmap_index_tbl;
Query OK, 0 rows affected (0.05 sec)
#再次查询
mysql> show index from example_db.example_bitmap_index_tbl\G;
Empty set (0.00 sec)
三、注意事项
- 目前索引仅支持 bitmap 类型的索引。
- bitmap 索引仅在单列上创建,不支持多列。
- bitmap 索引能够应用在 Duplicate、Uniqe数据模型的所有列和 Aggregate模型的key列上。
- bitmap 索引支持的数据类型如下:
- TINYINT
- SMALLINT
- INT
- BIGINT
- CHAR
- VARCHAR
- DATE
- DATETIME
- LARGEINT
- DECIMAL
- BOOL
- bitmap索引仅在 Segment V2 下生效。当创建 index 时,表的存储格式将默认转换为 V2 格式。注意: Apache Doris 早期版本的存储格式为 Segment V1 ,在__0.12__版本中实现了新的存储格式__Segment V2_,引入了__Bitmap__索引、内存表、 Page Cache 、字典压缩以及延迟物化等诸多特性。从__0.13__版本开始,新建表的默认存储格式为__Segment V2__,与此同时也保留了对_ Segment V1__格式的兼容。
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨