《SQL Optimizer 解析》 | 青训营笔记

137 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第1天 《SQL Optimizer 解析》 | 青训营笔记 一:大数据体系

二:课程目录 01.大数据体系与SQL   02.常见的查询优化器(介绍其分类,重点:RBO+CBO)

            03.社区开源实践(Apache Calcite) 04.SQL引擎的前沿趋势 AI和OB的结合

三:1.3:SQL的处理流程

(1)Parser:

是将输入文本转换为ast(抽象语法树),parser有包括两个部分,Parser和Lexer,其中Lexer实现词法分析,Parser实现语法分析。

(词法分析后将token组成AST node 最终得到一个AST)

AST:

是Abstract Syntax Tree的缩写,也就是抽象语法树。AST是parser输出的结果。这也是语法树的精髓了,sql解析,本质上就是把sql转为 ast语法树,拿到这个语法树后,我们就能做很多事了,遍历也好,加点,修改也好,都可以在ast上完成。

(2)Analyzer和Logical Plan

Analyzer:绑定一些元信息例如:Database,Table,Column等信息

          检查SQL的合法性,例如数值的正确性

          将AST转化为Logical Plan

Logical Plan:逻辑地描述SQL对应的分步骤计算操作

           计算操作:算子(operator)

(3)查询优化:找到一个正确且执行代价最小的物理执行计划

      查询优化器是数据库的大脑

其将最小化网络数据传输的目标把逻辑拆分成多个物理计划片段

(4)Physical Plan和Executor

     Physical Plan:执行计划子树:最小化网络数据传输

                  利用数据的物理分布(数据亲和性)

                  增加Shuffle算子

     Executor:单机并行:cache,pipeline,SIMD

              多机并行:一个fragment对应多个实例

2.1:查询优化器分类

Top-down Optimizer

Bottom-up Optimizer

Rule-base Optimizer(RBO):基于关系代数的等价变换

Cost-based Optimizer(CBO)

RBO:

基于规则的优化,比如谓词下推,列裁剪,常量折叠。

a.常量折叠案例:

select 1+1 as id   from table1

会优化为(会提前将 1+1 计算折叠成 2,再赋给 id 列的每行,不用每行都计算一次 1+1)

select 2 as id   from table1

b.谓词下推案例:

select * from table1 a join table2 b on a.id=b.id where a.age>20 and b.cid=1

会优化为(在子查询阶段就提前将数据进行过滤,后期 join 的 shuffle 数据量就大大减少)

select * from ( select * from  table1 where age>20) ajoin (select * from table2 where cid=1) b on a.id=b.id

c.列裁剪案例:

select a.name, a.age,b.c id from (select * from table1 where a.age>20) ajoin (select * from table2 where b.cid=1) b on a.id=b.id

会优化为(提前将需要的列查询出来,其他不需要的列裁剪掉)

select a.name, a.age, b.cidfrom (select name,age,id from table1 where a.age>20) ajoin (select id,cid from table2 where b.cid=1) b on a.id=b.id

d.传递闭包

e.Runtime Filter

CBO:

基于代价的优化,多种物理计划基于cost model,选取最优的执行耗时最少的那个物理计划。

 

CBO的统计信息

CBO-统计信息的收集方式(实际中都会用到、各有优缺点)

·在DDL里指定需要收集的统计信息,数据库会在数据写入的时候收集或者更新统计信息

·手动执行explain analyze statement,触发数据库收集或者更新统计信息

·动态采样

2.3.1——CBO-统计信息推导规则

·Filter Selectivity:and、or、not条件、等于、小于条件。。。

2.3.2——CBO-执行计划枚举

·单表扫描-join的实现-两表Hash join-多表join

·贪心算法/动态规划选出最优的执行计划

·动态规划:找最优解

CBO效果-TPC-DS