首页 > 其他分享 >Doris(三) -- 索引

Doris(三) -- 索引

时间:2023-05-28 20:03:31浏览次数:39  
标签:name -- 创建 bitmap 索引 bloom Doris

索引

索引用于帮助快速过滤或查找数据。
目前 Doris 主要支持两类索引:
• 内建的智能索引:包括前缀索引和 ZoneMap 索引。
• 用户创建的二级索引:包括 Bloom Filter 索引 和 Bitmap倒排索引。
其中 ZoneMap 索引是在列存格式上,对每一列自动维护的索引信息,包括 Min/Max,Null 值个数等等。这种索引对用户透明。

前缀索引

doris中,对于前缀索引有如下约束:

  1. 他的索引键最大长度是36个字节
  2. 当他遇到了varchar数据类型的时候,即使没有超过36个字节,也会自动截断
    image

doris为这个表创建前缀索引时,它生成的索引键如下:

user_id(8 Bytes) + age(4 Bytes) + message(prefix 24 Bytes)

以下表中我们定义了:age,user_name,message作为表的key
image
那么,doris为这个表创建前缀索引时,它生成的索引键如下:

age(4 Bytes) +user_name(20 Bytes)
-- 虽然还没有超过36个字节,但是已经遇到了一个varchar字段,它自动截断,不会再往后面取了

当我们的查询条件,是前缀索引的前缀时,可以极大的加快查询速度。

SELECT * FROM table WHERE user_id=1829239 and age=20
-- 该查询的效率会远高于以下查询:
SELECT * FROM table WHERE age=20;

Bloom Filter 索引

image

  1. Bloom Filter 本质上是一种位图结构,用于判断一个值是否存在
  2. 会产生小概率的误判,因为hash算法天生的碰撞
  3. 在doris中是以tablet为粒度创建的,给每一个tablet创建一个布隆过滤器索引

创建BloomFilter索引

  • 建表的时候指定
PROPERTIES (
"bloom_filter_columns"="name,age,uid"
)
  • alter修改表的时候指定
ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "k1,k3");

ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "k1,k4");

ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "");

-- 查看BloomFilter索引
SHOW CREATE TABLE sale_detail_bloom \G;

-- 修改/删除BloomFilter索引
ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "customer_id,saler_id");

Doris BloomFilter适用场景
满足以下几个条件时可以考虑对某列建立Bloom Filter 索引:

  1. BloomFilter是在无法利用前缀索引的查询场景中,来加快查询速度的。
  2. 查询会根据该列高频过滤,而且查询条件大多是 in 和 = 过滤。
  3. 不同于Bitmap, BloomFilter适用于高基数列。比如UserID。因为如果创建在低基数的列上,比如 “性别” 列,则每个Block几乎都会包含所有取值,导致BloomFilter索引失去意义。字段随机
    Doris BloomFilter使用注意事项
  4. 不支持对Tinyint、Float、Double 类型的列建Bloom Filter索引。
  5. Bloom Filter索引只对 in 和 = 过滤查询有加速效果。
  6. 可以通过explain来查看命中了哪种索引 --没办法查看

Bitmap 索引

用户可以通过创建bitmap index 加速查询

image

创建索引
在table1 上为siteid 创建bitmap 索引

CREATE INDEX [IF NOT EXISTS] index_name ON table1 (siteid) USING BITMAP COMMENT 'balabala';

create index 索引名称  on 表名(给什么字段创建bitmap索引) using bitmap COMMENT 'balabala';

create index user_id_bitmap on sale_detail_bloom(sku_id) USING BITMAP COMMENT '使用user_id创建的bitmap索引';

-- 查看索引
SHOW INDEX FROM example_db.table_name;

-- 删除索引
DROP INDEX [IF EXISTS] index_name ON [db_name.]table_name;

注意事项

  • bitmap 索引仅在单列上创建。
  • bitmap 索引能够应用在 Duplicate、Uniq 数据模型的所有列和 Aggregate模型的key列上。
  • bitmap 索引支持的数据类型如下:(老版本只支持bitmap类型)
    TINYINT,SMALLINT,INT,BIGINT,CHAR,VARCHAR,DATE,DATETIME,LARGEINT,DECIMAL,BOOL
  • bitmap索引仅在 Segment V2 下生效(Segment V2是升级版本的文件格式)。当创建 index 时,表的存储格式将默认转换为 V2 格式

标签:name,--,创建,bitmap,索引,bloom,Doris
From: https://www.cnblogs.com/paopaoT/p/17438719.html

相关文章

  • git 项目演练:007
    接下来进行项目演练,这是一个项目提交到git一个完整过程 1.创建一个项目,如下,我创建了一个“测试项目” 2.将项目添加到git管理仓库,打开GitBash,cd到“测试项目”中 3.使用gitinit命令将项目添加,此时项目下就会多出.git文件,那就说明添加成功了  4.然后在......
  • 算法刷题记录:乒乓球
    题目链接https://ac.nowcoder.com/acm/contest/19306/1033题目分析这题好坑,乒乓球的比分如果相差<2,还得继续比下去,但是题目里面没有说qwq。看了眼题解才发现这个点。AC代码#include<iostream>usingnamespacestd;//统计11分制和21分制的比分strings;intmain(......
  • hash碰撞(选做)
    hash碰撞(选做)查找资料,提供不少于3条md5算法和3条sh1算法的碰撞实例1提供数据和数据来源(图书,网站...)2用openssl命令验证碰撞,提交演示截图MD5样本一4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d15......
  • unity学习日志5(麦扣老师3DRPG项目学习)
    设计模式单例模式(泛型单例)作用:提高代码复用率,增加代码可读性//实现泛型单例,并对T进行约束,规定只有各类manager使用单例模式publicclassSingleton<T>:MonoBehaviourwhereT:Singleton<T>{privatestaticTinstance;//通过属性来访问直接获取私有的静......
  • Rust Web 全栈开发之 Actix 尝鲜并构建REST API
    RustWeb全栈开发之Actix尝鲜并构建RESTAPI一、Actix尝鲜需要使用的crateactix-webv4.3.1actix-rtv2.8.0~via......
  • Redis基础课程讲义
    Redis基础课程内容Redis入门Redis数据类型Redis常用命令Redis使用场景在Java中操作Redis1.前言1.1什么是RedisRedis是一个基于内存的key-value结构数据库。Redis是互联网技术领域使用最为广泛的存储中间件,它是「RemoteDictionaryService」的首字母缩写,也就是「远......
  • 感染蠕虫病毒Synaptics的查杀历程
    一、问题发现最近每次电脑开机联想电脑管家都给我报“发现可疑陈鼓型,存在安全风险”,一开始也没太在意,直接点立即隔离,但是每天都报这就有点不正常了~~清一色的xlsm文件当我插上移动硬盘的时候,弹出时总是提示正在被占用:用事件查看器检查:发现了Synaptics这个东西而且总是......
  • 函数指针和函数指针数组
    //voidPrint(constchar*str)//{// printf("%s\n",str);//}//intmain()//{// (*(void(*)())0)();//将0地址处的函数强制转换位无类型的函数指针,解引用并调用// void(*p)(constchar*)=Print;// void(*signal(int,void(*)(int)))(int);// //signal是一个函数指针,函数的两个......
  • 第三章 基本数据结构
    3.1线性数据结构一旦某个元素被添加进来,它与前后元素的相对位置将保持不变3.2栈3.3.1什么是栈添加和删除操作总发生在同一端,即顶端,另一端称为底端。元素添加顺序:后进先出。应用:点击返回按钮,反向浏览网页。......
  • git 文件恢复与项目还原:008
    1.【文件恢复】:将文件恢复到上一次提交的状态注意:新建且没有提交的文件无法使用文件恢复命令:gitcheckout--文件名 假如我们的一开始是这样的,这是没有报错的状态文件 然后我添加了一段内容,比如我添加这段内容项目报错了,我需要恢复到没有报错的状态方法一:代码比......