SQL optimizer解析|青训营笔记

76 阅读2分钟

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

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