SQL查询优化器解析 | 青训营笔记

128 阅读3分钟

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

课堂笔记

一、本堂课重点内容:

  • 介绍了大数据体系框架以及sql的执行流程
  • 讲解如何对sql查询进行优化,重点讲解RBO,CBO
  • 介绍优化器的开源实践,以Apache Calcite为例
  • 介绍Sql引擎趋势发展,重点介绍DB和AI的结合

二、详细知识点介绍:

1.一条SQL语句的执行流程

当用户输入一条sql语句并执行后,要经过Parser,Analyzer,Optimizer,Excutor等阶段。

  • parser阶段对sql语句进行词法分析和语法分析得到AST抽象语法树,词法分析主要是拆分字符串得到字符串常量,运算符号等Token。
  • Analyzer阶段主要是检查并绑定元信息如表信息、列信息等;并进行合法性检查;最后生成描述sql分步骤计算的逻辑执行计划。
  • Optimizer主要是对生成的逻辑执行计划进行优化,找到一个正确执行且代价最小的物理执行计划。
  • 最后Excutor就是具体执行物理计划,可以单机并行,多机并行计算等。

2.查询优化器的介绍

重点介绍CBO,RBO两种查询优化器。

  • CBO(Cost-based Optimizer) :主要是使用一个模型估算执行计划的代价,选择代价最小的执行计划;而执行计划的代价可以转为所有算子的执行代价之和。
  • RBO(Rule-based Optimizer):主要是基于规则进行优化,包括列裁剪,谓词下推,传递闭包等几百条基于经验归纳得到的优化规则。

3.开源框架 Apache Calcite介绍

其主要特点为有统一的SQL查询引擎、支持异构数据模型、内置RBO、CBO等优化器

  • 通过HepPlanner组件实现RBO;包括100+的优化规则,四种匹配规则等。其优化特点是优化速度快,实现简单,但不保证最优。
  • 通过VolcanoPlanner实现CBO;包括共享子树减少内存开销、剪枝减少搜索空间等。

4.未来技术展望

主要包括以下几个方面

  • 引擎架构进化,如存储计算分离
  • Cloud云原生
  • 湖仓一体
  • Data + AI

其中DATA + AI即把大数据与人工智能结合起来,以后可能会借助机器学习算法来自动调参,自动优化查询计划; 以及在人工智能领域内嵌SQL语言。

三、实践练习例子:

谓词下推的实践例子

如图所示sql原先是先jin生成表之后再进行过滤

VPJP@END6RIK60Z%QWA0H0L.png

经过谓词下推后变为如下先过滤再jin生成新表,可以大大减少join的数据量

A%}7SMBH~X{VB}AMF9$)9}P.png

四、课后个人总结:

通过这节课对SQL的底层执行计划加深了了解。其中RBO的一些优化规则,加CBO的底层原理不好理解,需要多多巩固复习加深理解。