sql优化器 | 青训营笔记

216 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第2天,今天我学习了「SQL Optimizer 解析」的视频。笔记如下:

1、大数据体系

大数据体系.png 截图自字节第四届青训营大数据的「SQL Optimizer 解析」视频

2、sql的处理流程

sql的处理流程.png

  • 解析器将string转换为AST;

3、常见的查询优化器

  1. top-down optimizer:从目标输出开始,由上往下遍历计划树,找到完整的最优执行计划;
  2. botton-up optimizer:从零开始,由下往上便利计划树,找到完整的执行计划;
  3. rule-based optimizer:根据关系代数等价语义,重写查询/基于启发式规则/会访问表的元信息,不会涉及具体的表数据;
  • rbo的关系代数:选择、投影和连接等;
  • rbo的优化原则:优化io(输入输出)、优化网络、优化cpu和内存等;有列裁剪、谓词下推、传递闭包、runtime filter(min-max、in-list、bloom filter);
  • 优点:实现简单,优化速度快;
  • 缺点:不能保证得到的是最优的执行计划;
  1. cost-based optimizer:使用一个模型估算执行计划的代价,选择代价最小的执行计划;
  • cbo使用统计模型和代价信息估算执行计划的代价;
  • cbo使用贪心算法或者动态规划来寻找最优执行计划;
  • 在大数据场景下cbo对查询性能很重要;

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

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

5、前沿趋势

a.引擎架构的优化,存储计算分离一体化(HTAP、HSAP、HTSAP);

b.云原生;

c.湖仓一体;

d.data+ai(AI4DB\DB4AI);

以上均对sql优化器有了更高的新要求。

以上笔记是在学习字节第四届青训营大数据的「SQL Optimizer 解析」视频后整理所得,其中仍存在许多错漏之处,还请各位批评指正。

一更于2022年7月24日晚22:08