SQL 查询优化器(SQL Optimizer)| 青训营笔记

247 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第1天

常见查询优化器

Top-dowm Optimizer

Bottom-up Optimizer

RBO(Rule-based Optimizer)

  • RBO优化原则:列裁剪(可以把查询中算子用不到的字段(列)过滤掉,使得扫描的数据量减少)、谓词下推(比如where就是谓词,让谓词算子(过滤条件)下推尽早被执行,避免掉一些不必要的数据)、传递闭包(从谓语算子找到隐藏的传递性,推到出新的过滤条件,再进行谓词下推)、Runtime Filter(在算子执行后,把它的数据传递给其他算子,充分利用单个算子的信息在整个执行计划)
  • 主流RBO实现一般都有几百条基于经验归纳得到的优化规则
  • 优点:实现简单,优化速度快
  • 缺点:不保证得到最优的执行计划

CBO(Cost-based Optimizer)

  • 统计信息+推导规则-->计算算子代价-->计算执行计划代价-->执行计划枚举 (使用一个模型估算执行计划的代价,选择代价最小的执行计划。)
  • CBO使用代价模型和统计信息估算执行计划的代价
  • CBO使用贪心或者动态规划算法寻找最优执行计划
  • 在大数据场景下CBO对查询性能非常重要

查询优化器相关的社区开源实践

  • 主流优化器都包含RBO和CBO;
  • Apache Calcite是大数据领域很流行的查询优化器
  • Apache Calcite RBO定义了许多优化规则,使用pattern匹配子树,执行等价变换
  • Apache Calcite CBO基于Volcano\Cascade框架
  • Volcan\Cascade框架的精髓是:Memo、动态规划、减枝

前沿趋势

  • 引擎架构的优化,存储计算分离,一体化(HTAP、HSAP、HTSAP)
  • Cloud,云原生,serverless
  • 湖仓一体,Query Federation
  • data+ai(AI4DB\DB4AI):AI4DB包括智能调参、负载调度、统计信息估计等;DB4AI包括内嵌人工智能算法(MLSQL)、内嵌机器学习框架(SparkML)