这是我参与「第四届青训营」笔记创作活动的第1天 SQL Optimizer解析
- string → AST (abstract syntax tree )抽象语法树
- 词法分析:拆分string ,得到字符串常量,数值常量,关键词,运算符号等token
- 语法分析:将token组成ASTNode,得到一个AST
- 实现:递归下降
- Analyzer功能
- 检查并绑定DataBase、 Table、 column等
- SQL合法性检查,如max的输入必须是数值
- AST → Logical plan(在某些统中这个工作由一个converter完成)
- logical plan简介
- 逻辑的描述SQL对应的分步骤计算
- 计算操作:算子(operator)
- 查询优化
- 找到一个正确且执行代价最小的物理执行计划(一般SQL越复杂,Join表越多,查询优化的意义越大
- Plan Fragment :执行计划子树
- 最小化网络数据传输
- 利用数据的物理分布(数据亲和性)
- 增加shufile算子(每个节点执行计划的连接)
- Executor
- 单机并行:cache、pipline、 SIMD
- 多机并行:一个fragment对应多个实例
- 常见的查询优化器
- RBO:基于关系代数等价规则对逻辑计划进行变换
- Pattern:定义了特定结构的operator子树
- Rule:定义了如何将其匹配的节点替换为新形点(原地替换)
- 匹配pattern应用Rule转换直到没有可匹配的Rule
- 局限:多表连接问题和天法确定和选择最优分布式
- CBO
- 使用模型估计执行计划
- 分而治之
- 非原地替换
- 算子代价
- 动态规划枚举
- 查询优化器的社区开源实践
- volcano/cascade框架
- Memo:保存Cascades Optimizer在搜索时生成的搜索空间—森林
- Memo本质是 AND/OR Graph,通过共享相同子树减少内有开销
- Branch-and-Bound Pruning
- 己搜索完成的物理计划的代价最小值成为Cost Upper Bound。当新的搜索分支代价高于它时,可不继续搜索
- SQL相关的前沿趋势
- 存储计算分离
- HASP,HTAP,HTSAP
- Cloud Native,Serverless
- 数据仓库,数据湖,湖仓一体,联邦查询
- 智能化
- AI4DB
- DB4AI