数据结构与算法|青训营笔记

79 阅读2分钟

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

  1. 一、本堂课的重点内容 SQL查询优化器

  2. 二、详细知识点介绍:
    截屏2022-07-24 10.21.06.png

  3. 大数据的体系和SQL: 希望通过SQL处理所有的data SQL的处理流程:

截屏2022-07-24 10.37.03.png

  • Parser: str->AST(abstract syntax tree):拆分字符串成不同的token,再将其组成为AST node,最终得到AST
  • Analyzer:检查并绑定元信息+SQL是否正确+AST➡️logic plan
  • 查询优化器对数据库来说非常重要(感知数据分布&数据亲和性)
  1. 常见的查询优化器
  • 查询优化器的分类:
    • top—down optimizer:从目标开始从上往下遍历计划树,找出完整的最优执行计划(eg:SQLServer)
    • Bottom-up optimizer:从零开始,由下往上遍历计划树,找到完整的执行计划
    • Rule-based optimizer(RBO):根据关系代数的等价语义重写查询,基于启发式规则,会访问表的catalog但不会涉及具体的data(实现简单,优化速度快但是不保证能得到最优的执行计划)
      • 运算符&等价变换截屏2022-07-24 13.01.00.png
      • 优化原则:Read data less and faster(I/O);transfer data less and faster(Network);process data less and faster(CPU&/Memory) eg: 截屏2022-07-24 13.32.35.png
      • 列裁剪:从上往下扫描,计算project需要哪些列,依次传递,最终得到所有的列的集合,scan时只需要扫描几列
      • 谓词下推截屏2022-07-24 13.28.02.png
    • -传递闭包
      • runtime filter(产生新的filter, 用在join的查询端)
    • Cost-based optimizer(CBO):实用模型估算并选择代价最小的执行计划(贪心算法/动态规划)
    • -统计信息:
        • 原始表统计信息:表/分区级别;列级别
        • 推导统计信息:selectivity;cardinality
      • 统计信息的收集方式:在数据库里面制定需要收集的统计信息;手动执行explain analyze statement; 动态采样
      • 统计信息推导规则:

截屏2022-07-24 14.34.14.png

      • 执行计划枚举:

截屏2022-07-24 14.50.16.png

三、实践练习例子(社区开源实践)

截屏2022-07-24 15.16.21.png

  1. Apache Calcite:
  • 其中的RBO:HepPlanner使用patter匹配子树,执行等价交换
  • 其中的CBO:VolcanoPlanner(基于Volcano/Cascade:Memo,动态规划,剪枝)
  1. 前沿趋势:
  • 引擎架构的进化:存储计算分离
  • Cloud:云原生
  • 湖仓一体
  • Data+AI

四、课后个人总结: 本节课讲师主要讲述了SQL的查询优化器分类以及主要介绍了CBO和RBO的工作原理并将其在实践中的运用(如:calcite中的CBO和RBO的运用)