局限性与解决方案
IMCI的查询各项剪枝技术均具有一定局限性,实际场景需要结合多种技术来提升其查询剪枝能力。
- 分区剪枝:缺点是对于存量数据来说,是一个比较昂贵的DDL操作,另外查询条件必须包含分区键才能生效。对于存量数据来说,可以找个空闲时间进行变更操作,而如果查询条件很多不包含分区键,则建议采用其它优化手段。
- 统计信息剪枝:由于写入时不排序,统计信息对于数据分布离散均匀的场景效果比较差,有以下优化方案:
- 减小pack大小。对于minmax与Bloom filter来说,更小的pack意味着更细粒度的索引,通常也具有更好的剪枝效果。IMCI支持调整表的列索引pack大小,然而减小pack大小可能也会导致内存占用的增加。
- 数据排序。对于数据分布比较随机的情况,可以考虑使用PolarDB IMCI的排序键功能,这样的数据具有良好的局部性,非常有利于统计信息剪枝。
- 关闭pruner。和其它任何索引一样,统计信息剪枝不一定有效果,但存在一定的计算与内存开销,对于Bloom filter还存在一定的IO开销,此时可以查询时关闭pruner。
未来发展趋势
索引加速技术下一步的优化方向如下:
- 基于数据特征,如果静态数据有序,还可以建立粒度更大的分区索引进行快速过滤。
- 对于位图索引,可以考虑与数据编码相结合,利用常见的编码技术(字典,RLE),实现基于压缩数据的查找。
- 对于Runtime Filter,可以引入Sideways Information Passing框架来提供更好的可维护性与可扩展性,由中间人负责处理和转发来自算子的消息,以及协调组件之间的交互。由于中间人具有全局的视野,可以大幅提升运行时信息的利用率。
- 丰富索引的类型,例如处理表达式运算函数索引,处理文本搜索的倒排索引等。
- 在多索引的基础上,通过自动化采样分析技术,为每个列建立合适的索引。从索引生成的时机和准确度来看,还有一个方向是database cracking,主要是根据业务查询模式来精准生成索引。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




