查询加速

更新时间:2025-04-08 01:37:10

云数据库 SelectDB 版通过Nereids优化器与Pipeline执行引擎实现查询自动优化,同时支持手动优化查询(如索引加速、高并发点查、物化视图及 Join 优化)以满足高性能查询场景需求。

自动优化查询规划

SelectDB中,Nereids优化器和Pipeline执行引擎是其自带的两项核心的查询处理技术,分别针对查询优化和执行阶段进行深度优化,显著提升复杂查询性能和资源利用率。以下是Nereids优化器和Pipeline执行引擎在SelectDB如何对一条SQL优化的大致流程:

image

各技术主要特性如下所示,如需了解更多,您需查阅相关文档。

技术名称

特性说明

技术名称

特性说明

Nereids全新优化器

  • 更好地支持多层子循环嵌套等复杂查询与多表Join查询。

  • 减少了优化规则出现逻辑错误的可能。

Pipeline执行引擎

  • 提高了CPU利用效率。

  • 减少了大查询对小查询的资源挤占问题。

手动优化查询

如果SelectDB自带的Nereids全新优化器和Pipeline执行引擎仍未能满足您的查询需求,您可以通过统计信息分析查询数据,并根据分析结果选择合适的优化策略,以优化您的查询。

优化方式

使用场景

使用限制

优化方式

使用场景

使用限制

高并发点查优化

适用于高并发的点查询优化。

说明

点查询是指从数据库中检索满足特定条件的少量数据,通常通过主键或高基数列进行检索。

  • 开启行存模式需要消耗额外的存储空间。

  • PreparedStatement目前只支持主键点查。

物化视图

适用于重复且耗时较长的复杂查询的优化。

  • 物化视图针对Unique数据模型,只能改变列顺序,不能起到聚合的作用,所以在Unique模型上不能通过创建物化视图的方式对数据进行粗粒度聚合操作。

  • 单表上过多的物化视图会影响数据导入的效率。

更多限制,请参见物化视图的局限性

索引加速

适用于任何场景下快速过滤或地位数据的优化。

不同的索引,会有不同限制,更多详情,请参见索引加速

Bucket Shuffle Join

Join优化。

Join条件中需存在左表的分布式列,且左表在执行时只使用了单分区的数据。

Colocation Join

Join优化。

Join条件中需存在左表的分布式列,且左右属于同一个Colocate Group。

Runtime Filter

大表Join小表的优化。

使用Runtime FilterJoin语句需同时满足以下两个要求。

  • 左表大右表小:构建Runtime Filter需要承担计算成本,包括一些内存的开销。

  • Join 结果集小:结果集小说明这个Join语句可以过滤掉左表的绝大部分数据。

BITMAP精准去重

去重结果必须精确,且数据基数在百万级以内,或存储资源充足的场景。

  • 类型限制

    • 仅直接支持整数类型(TINYINT/SMALLINT/INT/BIGINT)。

    • 非整数类型(如字符串)需通过全局字典映射为整数后使用,但会增加维护成本。

  • 内存限制:高基数(如十亿级)时,BITMAP 需要存储一个巨大的位数组,内存压力显著,可能导致内存不足。

HLL近似去重

需处理海量数据(如十亿级),且允许结果一定误差(如分析类指标),或需在分布式系统中高效合并结果的场景。

  • 精度损失:无法得到精确结果,误差率会随着基数的增加而降低(例如基数越大,误差率相对越小)。

  • 需合理配置参数:HLL 的精度由参数(如寄存器数量、哈希位数)决定,参数设置不当可能影响结果准确性。

  • 本页导读 (1)
  • 自动优化查询规划
  • 手动优化查询