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

690 阅读4分钟

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

前言:什么是SQL查询优化器?

查询优化器(简称优化器)是负责生成 SQL 语句的有效执行计划的 SQL Server 数据库引擎 组件 ,具体地说,查询优化器是SQL Server针对用户的请求进行内部优化,生成(或重用)执行计划并传输给存储引擎来操作数据,最终返回结果给用户的组件。

SQL查询优化器思维导图 屏幕截图 2022-07-24 180912.png 我们根据思维导图将SQL查询优化器分为四个部分:

1.大数据体系和SQL 2.常见的查询优化器 3.社区开源实践 4.前沿趋势

大数据体系中的SQL

- one SQL rules big data all

  1. 批式分析(Spark Hive MR)
  2. 实时分析(Flink)
  3. 交互分析(Presto ClickHouse Doris)

- 此三类分析也是大数据体系当中的分析引擎

SQL的处理流程 - SQL需要依次经过Parser,Analyzer,Optimizer和Executor的处理

1.Parser将SQL语句得到一系列的token,将一系列token组成AST node,最终通过java cc解析成AST进行输出

2.Analyzer将检查并绑定元信息,将AST转变成Logical Plan,Logical Plan 逻辑地描述SQL对应的分步骤计算操作(算子)

3.Optimizer是查询优化,它可以跟踪优化器做出的各种决策并将跟踪结果记录在某表中,Physical Plan 执行计划子树,利用数据的物理分布(数据亲和性)并增加shuffle算子。

4.Executor 分为单机与多机并行,单机并行:cache,pipeline,SIMD。多机并行:一个fragment对应多个实例。

常见的查询优化器

  • 查询优化器类型

Top-down Optimizer (从上往下遍历计划树,找到完整的最优执行计划)

Bottom-up Optimizer (从下往上遍历计划树,找到完整的执行计划)

RBO(根据关系代数等价语义,重写查询。 基于启发式规则。 会访问表的元信息,不会涉及具体表数据)

CBO(使用一个模型估算执行计划的代价,选择代价最小的执行计划)

RBO(Rule-based Optimizer)

关系代数分为运算符(select,project,join等)和等价变换(结合律 交换律 传递性)

优化原则分为Read data less and faster(I/O),Transfer data less and faster (Network),Process data less and faster(cpu&Memory)

列裁剪将不需要的列表信息直接裁剪出去,减少消耗

谓词下推将JOIN与FILTER交换,减少列表无用的信息

传递闭包 FILTER>123就能推出FILTER中pv.siteld>123

Runtime Filter 用(min-max in-list bloom filter)减小搜索范围

CBO(Cost-based Optimizer)

-统计信息

原始表统计信息 推导统计信息

-统计信息的收集方式

DDL中收集 手动执行 explain analyze statement 动态采样

-统计信息推导规则(前提假设列和列之间独立,列的值是均匀分布)

AND条件: fs(a AND b) = fs(a) * fs(b)

OR条件: fs(a OR b) = fs(a) + fs(b) - (fs(a) * fs(b))

NOT条件: fs(NOT a) = 1.0- fs(a)

等于条件(x = literal) literal < min && literal > max: 0 V1/NDV

小于条件 (x < literal) literal < min: 0 literal > max: 1 (literal - min) / (max - min)

执行计划枚举

通常使用贪心算法或动态选出最优的执行计划

小结:

-RBO

RBO实现一般都有几百条基于经验所得到的优化规则 实现简单,优化速度快 不保证得到最优的执行计划

-CBO

使用代价模型 利用贪心算法或者动态规划算法

社区开源实践

Apache Calcite

one size fits all (统一的SQL查询引擎)

Calcite RBO

HepPlanner

Calcite CBO

VolcanoPlanner

前沿趋势(DATA+AI)

最有就业前景就是大数据加人工智能,而大数据加人工智能无非俩种情况!

AI4DB or DB4AI

总结: 在听了这节对SQL查询优化器浅析课程我了解到大数据对数据搜索以及查找都有着很大的学问,我也深刻了解到目前大数据的前景以及SQL的处理流程包括所使用的算法,算法各有优缺!

个人思考: 在未来能否使用一种新算法使得存储与计算分离?我们是否能够创建既能让其一体化又能存储与计算分离的新系统。

image.png