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

140 阅读2分钟

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

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

#SQL 查询优化器

1、大数据体系

业务应用 BI报表 | 数据挖掘 | 营销分析 | 精准推荐 管控运维 数据开发 Airflow | DAG 集群创建 权限管控 Apache Ranger | GDPR 集群创建 批处理 实时分析 交互分析 集群管理 Spark Presto 消息 集群管理 分析引擎 Hive Flink ClickHouse 队列 服务管理 MR Doris 服务管理
资源调度 YARN | K8S Kafka 用户管理 存储系统 HDFS | HBase | NAS | Object Store | 数据湖 Pulsar 监控报警 基础设施 ECS | 存储 | VPC NSQ 日志查询

2、SQL的处理流程

—SQL—>Parser—AST—>Analyzer—Logical Plan—>Optimizer(优化器处理)—Physical Plan—>Executor

①Parser 输入String(字符串) -> 输出AST(abstract syntax tree抽象语法树) 该过程经历两个步骤 1、词法分析:拆分字符串,得到关键词、数值常量、字符串常量、运算符号等token 2、语法分析:将token组成AST node,最终得到一个AST

Parser △把文本变成抽象语法树结构(AST) △涉及词法分析阶段(拆分字符串,提取关键字,字符串,数值等)和语法分析阶段(把词条按照定义的语法规则组装成抽象语法树结构) △和编译原理课程里的“前端”知识相关

Analyzer △访问库/表元信息并绑定 △判断 SQL 是否合理,比如数据库,表和列名是否存在,列的数据类型是否正确 △将 AST 转换成逻辑计划树(在某些系统中这个工作由一个 Converter 完成)

优化器的输出是一个分布式的物理执行计划。

Executor 按照物理执行计划扫描和处理数据,充分利用机器资源(CPU 流水线,乱序执行,cache,SIMD)

RBO小结 △主流RBO实现一般都有几百条基于经验归纳得到的优化规则 △优点:实现简单,优化速度快 △缺点:不保证得到最优的执行计划