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 等逻辑操作因为只需要进行位运算。该索引更多的适合正交查询

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Doris可以使用多种索引来提高查询性能和数据存储效率。其中包括Aggregate表(Uniq表同理)添加rollup、Duplicate表添加rollup、key和前缀索引、Bloom Filter索引和Bitmap索引等。\[1\]\[2\]\[3\] 在Apache Doris中,可以通过在Aggregate表或Uniq表上添加rollup来创建索引。这样可以提高查询性能和聚合操作的效率。 Duplicate表也可以添加rollup来创建索引,这样可以提高查询性能和去重操作的效率。 另外,Apache Doris还支持key和前缀索引。通过创建key和前缀索引,可以提高查询命中前缀索引的规则,从而提高查询性能。 对于高基数的列,比如UserID,可以使用Bloom Filter索引。Bloom Filter索引适合在高基数的列上创建,因为它可以快速判断某个值是否存在于索引中。 而对于低基数的列,比如"性别"列,使用Bloom Filter索引可能失去意义,因为每个Block几乎都会包含所有取值。 此外,Apache Doris还支持Bitmap索引。Bitmap索引占用的空间非常小,创建和使用非常快。当根据键值查询时,可以快速定位到具体的行号。而当根据键值做and/or或in(x,y,..)查询时,可以直接使用索引的位图进行或运算,快速得出结果行数据。 综上所述,Apache Doris提供了多种索引类型,可以根据具体的需求选择合适的索引来提高查询性能和数据存储效率。 #### 引用[.reference_title] - *1* [Apache Doris的Rollup和前缀索引](https://blog.csdn.net/yy8623977/article/details/120929403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Apache doris索引机制介绍](https://blog.csdn.net/hf200012/article/details/119272670)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值