tnblog
首页
视频
资源
登录

Doris 索引(学习笔记)

31人阅读 2025/4/2 10:40 总访问:3475551 评论:0 收藏:0 手机
分类: 大数据

Doris 索引(学习笔记)

索引


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

前缀索引


doris中,对于前缀索引有如下约束:
1.他的索引键最大长度是36个字节
2.当他遇到了varchar数据类型的时候,即使没有超过36个字节,也会自动截断
● 示例1:以下表中我们定义了: user_id,age,message作为表的key ;


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

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


示例2:以下表中我们定义了:age,user_name,message作为表的key


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

  1. age(4 Bytes) +user_name(20 Bytes) 指定key的时候


为什么是这个结果呢?
虽然还没有超过36个字节,但是已经遇到了一个varchar字段,它自动截断,不会再往后面取了
当我们的查询条件,是前缀索引的前缀时,可以极大的加快查询速度。比如在第一个例子中,我们执行如下查询:

  1. SELECT * FROM table WHERE user_id=1829239 and age=20


该查询的效率会远高于以下查询:

  1. SELECT * FROM table WHERE age=20


所以在建表时,正确的选择列顺序,能够极大地提高查询效率。

Bloom Filter 索引


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

如何创建BloomFilter索引?


建表的时候指定

  1. PROPERTIES (
  2. "bloom_filter_columns"="name,age,uid"
  3. )


alter修改表的时候指定

  1. ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "k1,k3");
  2. ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "k1,k4");
  3. ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = ""); -- 删除已经存在的布隆过滤器


简单示例

  1. CREATE TABLE IF NOT EXISTS sale_detail_bloom (
  2. sale_date date NOT NULL COMMENT "销售时间",
  3. customer_id int NOT NULL COMMENT "客户编号",
  4. saler_id int NOT NULL COMMENT "销售员",
  5. sku_id int NOT NULL COMMENT "商品编号",
  6. category_id int NOT NULL COMMENT "商品分类",
  7. sale_count int NOT NULL COMMENT "销售数量",
  8. sale_price DECIMAL(12,2) NOT NULL COMMENT "单价",
  9. sale_amt DECIMAL(20,2) COMMENT "销售总金额"
  10. )
  11. Duplicate KEY(sale_date, customer_id,saler_id,sku_id,category_id)
  12. PARTITION BY RANGE(sale_date)
  13. (
  14. PARTITION P_202111 VALUES [('2021-11-01'), ('2021-12-01'))
  15. )
  16. DISTRIBUTED BY HASH(saler_id) BUCKETS 1
  17. PROPERTIES("replication_num" = "1");


查看BloomFilter索引

  1. SHOW CREATE TABLE sale_detail_bloom


修改/删除BloomFilter索引

  1. 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索引失去意义。字段随机

BloomFilter使用注意事项:
1.不支持对Tinyint、Float、Double 类型的列建Bloom Filter索引。
2.Bloom Filter索引只对 in 和 = 过滤查询有加速效果。

Bitmap 索引


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


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

  1. CREATE INDEX [IF NOT EXISTS] index_name ON table1 (siteid) USING BITMAP COMMENT '注释';
  2. create index 索引名称 on 表名(给什么字段创建bitmap索引) using bitmap COMMENT '注释'
  3. create index user_id_bitmap on sale_detail_bloom(sku_id) USING BITMAP COMMENT '使用user_id创建的bitmap索引';


查看索引

  1. SHOW INDEX FROM test.sale_detail_bloom;


删除索引

  1. 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 格式


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

Windows Docker Doris 容器部署

Windows Docker Doris 容器部署[TOC] 引言Doris 是一款高性能、分布式、可扩展的分析型数据库,适用于海量数据的存储和分...

Doris 分区与桶学习笔记

Doris 分区与桶(学习笔记)[TOC] OLTP和OLAPOLTP联机事务处理OLTP(On-Line Transaction Processing) 公司针对自己公司的...

Doris 三种模型学习笔记

Doris 三种模型(学习笔记)[TOC] Aggregate聚合键模型是相同key的数据进行自动聚合的表模型。表中的列按照是否设置了 Agg...

Doris 数据的导入导出学习笔记

Doris 数据的导入导出(学习笔记)[TOC] 使用 Insert 方式同步数据用户可以通过 MySQL 协议,使用 INSERT 语句进行数据导...

Doris 突然内存升高解决方案

Doris 突然内存升高解决方案[TOC] 发现频繁refresh catalog xxx 会强制使对象相关的Cache失效,默认开启的采样也比较耗...

Doris 查询

Doris 查询[TOC] Doris的查询语法SELECT [ALL | DISTINCT | DISTINCTROW ] -- 对查询字段的结果是否需要去重...

Doris 作业案例

Doris 作业案例[TOC] 打地鼠案例需求:连续4次命中的人seq:第几次打地鼠m:是否命中,1-> 命中,0 -> 未命中下面是h...

Doris Rollup学习笔记

Doris Rollup(学习笔记)[TOC] ROLLUP 在多维分析中是“上卷”的意思,即将数据按某种指定的粒度进行进一步聚合。之前的...

Oracle --索引与视图

索引索引类似于图书的目录,用户可以通过索引快速查找到需要的内容,索引也可以理解为标识。索引是一种树形结构,从逻辑设...

Elasticsearch 基本概念:索引、文档和REST API

Elasticsearch 基本概念:索引、文档和REST API[TOC] 前言 为了了解 Elasticsearch 如何构成,我们首先需要理解索引(I...

Elasticsearch 倒排索引(运用Analyzer进行分词)

Elasticsearch 倒排索引[TOC] 正排与倒排索引 我们以一本书为例子,一本书的目录为正排索引,它将排列整本书的主要大纲...

sql 判断数据库、表、列、索引、视图、存储过程、临时表、函数笔记

前言欢迎使用tnblog注意使用模板的时候选择保留原有内容哦,不然会不小心替换你的已经写好的内容哦。我希望有个如你一般的人...

sql 索引

前言SQL索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息创建索引的语法crea...

ElasticSearch 分布式搜索引

前言:大家好,我是小付 今天和大家谈谈分布式搜索引擎这个东东,这个玩意现在有很多大企业都在用,所以就度了一下 了解了...

索引

前言首先了解什么是索引,索引的作用是什么索引,有助于加速表中检索数据。当从表中查询数据时,首先数据库会先检查索引是...
这一世以无限游戏为使命!
排名
2
文章
636
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术