这是我参与「第四届青训营 」笔记创作活动的第2天,今天我学习了「SQL Optimizer 解析」的视频。笔记如下:
1、大数据体系
截图自字节第四届青训营大数据的「SQL Optimizer 解析」视频
2、sql的处理流程
- 解析器将string转换为AST;
3、常见的查询优化器
- top-down optimizer:从目标输出开始,由上往下遍历计划树,找到完整的最优执行计划;
- botton-up optimizer:从零开始,由下往上便利计划树,找到完整的执行计划;
- rule-based optimizer:根据关系代数等价语义,重写查询/基于启发式规则/会访问表的元信息,不会涉及具体的表数据;
- rbo的关系代数:选择、投影和连接等;
- rbo的优化原则:优化io(输入输出)、优化网络、优化cpu和内存等;有列裁剪、谓词下推、传递闭包、runtime filter(min-max、in-list、bloom filter);
- 优点:实现简单,优化速度快;
- 缺点:不能保证得到的是最优的执行计划;
- 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