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

160 阅读4分钟

这是我参与「第四届青训营」笔记创作活动的的第1天。
本文记录了我在大数据基础班的第一节课的课堂笔记,以及部分曾经学过的关系代数的复习。原文是在本地编辑完成后上传,部分课件截图限于版权并未上传。
受限于个人水平,难免有疏漏,欢迎指正讨论。

概述

本节课程主要分为 4 个方面:

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

知识结构

1.1 大数据体系

本次的青训营课程主要讲解大数据体系中的分析引擎、存储系统、资源调度几部分。

1.2 SQL处理流程

说明:

  1. Parser

    SQL语句经过Parser转换为AST(抽象语法树)

  2. Analyzer

    AnalyzerAST转化为Logical Plan逻辑计划

    • Analyser

      检查绑定 Database,Table,Column等元信息

      检查合法性

      AST -> Logical Plan

    • Logical Plan

      只是逻辑地描述SQL分步骤计算操作,不记录详细的实现方式

  3. Optimizer 查询优化

    查询优化,为Logical Plan寻找一个执行代价最小的Physical Plan(物理执行计划)。

    同时,关系代数存在一个等效查询的概念,即不同语句返回相同结果的现象,即 不同的表达会影响语句效率。

    分布式SQL中,需要此模块优化执行性能,单机SQL效率差异不明显。

  4. Physical Plan和Executer

    • Plan Fragment 执行计划子树

      将物理执行计划拆分为子树

2.1 查询优化器分类

  • 遍历执行计划树的方式划分

    • Top-down Optimizer

      从目标输出开始,由上往下遍历

    • Bottom-up Optimizer

      从零开始,由下往上遍历

  • Rule-based Optimizer(RBO)

    • 关系代数等价语义,重写查询,即等效查询的原理
    • 基于启发式规则??
    • 访问元数据(catalog),不涉及具体数据(data)
  • Cost-based Optimizer(CBO)

    • 使用模型预估执行代价

2.2 RBO

2.2.1 关系代数

等价变换:结合律、交换率、传递性

等效查询的概念

等效查询.png 不同语句可以实现同样的查询效果,这些语句被称为等效查询。关系代数等价语义,重写查询的查询优化,正是基于此。

2.2.2 优化原则

  • 列裁剪

    执行操作中,数据表中的某些列是不需要的,可以尽量早地将所需的列读出,进行操作 ,避免读入不需要的列。

  • 谓词下推

    不影响结果前提下,尽量早地执行数据缩减,例如条件筛选、过滤操作。如图,在执行JOIN前就进行数据缩减操作,不影响结果,JOIN步骤所处理数据减少了。

    不是所有的JOIN都适用如图的谓词下推操作,SQL语句显示该JOIN操作为inner join,outer join需要另外讨论

  • 传递闭包

    没有谓词,创造谓词来下推! 已经进行完字面上的谓词的下推,根据关系代数传递性,推到出新的过滤条件,再进行谓词下推。

  • Runtime Filter (执行时产生的过滤)

    原理

    在对表进行JOIN操作时,选择其中之一表进行哈希,得出特征,将这些特征组成的过滤规则(Runtime Filter)传递给另一张表。

    常用过滤算法:

    • min-max:限制范围,缺点:要求数据分布集中,存在异常值效果差。
    • in-list:直接导出需要遍历数据的集合(或者去重的列表,即元素独立互不相同),缺点:需要访问的数据量大时,需要传递的list将会很大,网络开销大。NDV独立的互不相同元素个数。
    • bloom filter:

RBO 小结

2.3 CBO

使用模型估算执行计划的代价,选择代价最小的。

2.3.1 CBO-统计信息

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

统计信息收集方式

统计信息推导规则

  • 假设列与列之间是独立的,列的值均匀分布。
  • 选择率推导,导出每步筛选说需要的数据占总体的比率。

2.3.2 CBO-执行计划枚举

  • 贪心算法

  • 动态规划

    假定:全局最优的方案在局部也是最优的,从而将全局最优的方案拆分为寻找局部最优的方案。

CBO 小结

3 社区开源实践

4 前沿趋势

DATA+AI

  • AI for DB

    AI帮助优化DB查询优化

  • DB for AI

    在DB运行AI