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

142 阅读1分钟

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

以下是大数据体系图

image.png image.png

这节课主要内容有:大数据体系和sql、常见的查询优化器、社区开源实践、介绍大数据前沿趋势

大数据体系和SQL

1.1、大数据体系中的sql

image.png

对于批示分析的Spark、Hive、MR,实时分析Flink,交互分析Presto、ClickHouse、Doris都是提供了sql接口

1.2、sql的处理流程

image.png

Parser

String->AST:
词法分析:拆分字符串,得到关键词、数值常量、字符串常量、运算符号等taken。
语法分析:将taken组成AST node,最终得到一个AST。
实现:递归下降(ClickHouse)、flex和Bison(PostgreSQL)、javaCC(Flink)、Antlr(Presto.Spark)

image.png

Analyzer和Logical Plan

image.png

查询优化

image.png

Physical Plan 和 Executor

image.png

常见的查询优化器

2.1、查询优化器的分类

image.png

RBO - 关系代数

image.png

RBO 有四种优化规则:列裁剪、谓词下推、传递闭包、Runtime Filter

列裁剪

image.png

谓词下推

image.png

传递闭包

image.png

Runtime Filter

image.png

CBO的概念

image.png

CBO-统计信息

image.png

CBO-统计信息的收集方式

image.png

CBO-统计信息的推导规则

image.png

CBO-统计信息的问题

image.png

CBO-执行计划枚举

image.png

以下用动态规划的方式举例,找出执行计划的最小开销

image.png

image.png

image.png

image.png

image.png

社区开源实践

image.png

Apache Calcite概览

image.png

Calcite RBO

image.png

Calcite CBO

image.png

image.png

image.png

image.png

image.png

前沿趋势

主要趋势就是存储计算分离、云原生、湖仓一体、DATA+AI

image.png

个人总结:

通过本节课我了解到了大数据体系以及SQL的处理流程,了解了常见的查询优化器以及一些简单的原理,并且对大数据的前沿趋势有了一定的认识。