Doris——索引的创建和命中

一.概叙

索引用于帮助快速过滤或查找数据,doris主要有以下2类索引:

①内建自动创建的智能索引:前缀索引和ZoneMap 索引。
②用户手动创建的二级索引:倒排索引、bloomfilter 索引、ngram bloomfilter 索引 和 bitmap 索引。

二.智能索引

1.前缀索引

在 Aggregate、Unique 和 Duplicate 三种数据模型中。底层的数据存储,是按照各自建表语句中,AGGREGATE KEY、UNIQUE KEY 和 DUPLICATE KEY 中指定的列进行排序存储的。而前缀索引,即在排序的基础上,实现的一种根据给定前缀列,快速查询数据的索引方式。

前缀索引是稀疏索引,不能精确定位到 Key 所在的行,只能粗粒度地定位出 Key 可能存在的范围,然后使用二分查找算法精确地定位 Key 的位置。
特别注意:Doris 只有前 36 个字节能走前缀索引,所以:
①建表的时候key一定要手动指定,比如明细模型不建议使用默认key
②索引字段的类型和长度尽可能精确,从而增大索引范围。能使用int的坚决不使用bigint

2. ZoneMap 索引

ZoneMap 索引是在列存格式上,对每一列自动维护的索引信息,包括 Min/Max,null 值个数等等。在数据查询时,会根据范围条件过滤的字段按照 ZoneMap 统计信息选取扫描的数据范围。
而doris默认是列式存储,ZoneMap索引无需使用者额外操作。

三.用户手动创建的二级索引

1.倒排索引

倒排索引可以用来进行文本类型的全文检索、普通数值日期类型的等值范围查询,快速从海量数据中过滤出满足条件的行。
比如前缀索引只能命中36个字节。但是之后的字段想要做查询加速就可以考虑添加倒排索引。具体使用方式参考官网即可。

使用限制:

①Aggregate KEY 表模型:只能为 Key 列建立倒排索引。

②Unique KEY 表模型:需要开启 merge on write 特性,开启后,可以为任意列建立倒排索引。

③Duplicate KEY 表模型:可以为任意列建立倒排索引。

2.BloomFilter 索引

支持用户对取值区分度比较大的字段添加 BloomFilter 索引,适合在基数较高的列上进行等值查询的场景。
建议:高基数(5000 以上)列上构建,另外注意BloomFilter 索引只对 in 和 = 过滤查询有加速效果

3.NGram BloomFilter索引

NGram BloomFilter 索引是为了提升LIKE的查询性能
建议:亿级别以上数据,如果有模糊匹配,使用倒排索引或者是 NGram Bloomfilter,另外注意NGram BloomFilter 只支持字符串列,且NGram BloomFilter 索引和 BloomFilter 索引为互斥关系,即同一个列只能设置两者中的一个

4.Bitmap 索引

①Bitmap 索引能够应用在 DuplicateUniq 数据模型的所有列和 Aggregate模型的 key 列上。

②Bitmap 索引仅在 Segment V2 下生效。当创建 Index 时,表的存储格式将默认转换为 V2 格式。

③适用于低基数的列上,建议在 100 到 100,000 之间,如:职业、地市等。重复度过高则对比其他类型索引没有明显优势;重复度过低,则空间效率和性能会大大降低。特定类型的查询例如 COUNT, OR, AND 等逻辑操作因为只需要进行位运算。该索引更多的适合正交查询

### 如何优化 Apache Doris 单表查询性能的最佳实践 #### 配置参数调整 为了提升单表查询效率,可以考虑增加节点的内存配置并优化查询语句以减少内存占用。具体来说,应适当调整 Doris 的内存相关配置参数,例如 `max_memory_limit`。这可以通过修改配置文件 `be.conf` 来完成: ```properties max_memory_limit = 32GB ``` 此设置有助于确保有足够的资源来支持复杂的查询操作[^1]。 #### 查询语句优化 编写高效的SQL语句对于改善查询响应时间至关重要。应当仔细审查现有的查询逻辑,移除不必要的子查询或连接操作,并利用索引来加速特定字段上的查找过程。此外,合理使用分区表也可以显著加快大容量数据集中的检索速度[^3]。 #### 数据模型设计 良好的数据结构同样影响着读取效能。当创建新表格时,请务必规划好列族的选择及其存储属性;同时也要注意控制每行记录大小不超过推荐范围(通常建议保持在几千字节以内),以此降低I/O开销并促进缓存命中率的提高[^5]。 #### 导入策略改进 尽管本话题侧重于查询端的表现,但值得注意的是快速而稳定的数据加载机制同样是构建高性能OLAP系统不可或缺的一环。鉴于Apache Doris具备出色的批量写入能力——其压缩前70G的数据能在短短415秒内被成功录入至单一实例中,因此不妨探索更多关于流式摄取或是增量更新方面的可能性,进而间接助力在线事务处理环节的整体流畅度[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值