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

158 阅读2分钟

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

课程内容及分析理解

一、课程内容

1.大数据体系和SQL

2.常见的查询优化器

二、分析理解

(一)大数据体系和SQL

1.大数据体系(One SQL rules big data all)

  • 大数据的体系由多个部分组合而成,如存储系统(hdfs),分析引擎(SQL),数据开发(DAG),业务应用(BI 报表)等。现在主要来分析一下SQL的处理流程。

2.SQL的执行流程

  • 首先SQL会进行 解析器(Parser) 解析,将String类型转换为 抽象语法树(abstract syntax tree) ,通过词法和语法分析,对字符串进行拆分、得到关键词、数值常量等token,再将这些token组成AST node,最终得到一个完整的AST。具体实现方法有,递归下降(ClickHouse),Flex和Bison(PostgreSQL)。

  • 其次,再通过 分析(Analyzer)逻辑计划(Logical Plan) 过程,对SQL的合法性进行检查,并将AST转换为Logical Plan,再逻辑地描述SQL对应的分布骤计算操作。

  • 再次,对SQL进行 查询优化过程(Optimizer) ,它的主要目标是找到一个正确且执行代价最小的物理执行计划。因为一般的SQL越复杂,Join的表越多,数据量越大,查询优化的意义就越大,因此,Optimizer这个流程对整体处理流程是十分关键的。

  • 最后,通过 物理计划(Physical Plan)Executor(执行器) ,来调用各个组件执行操作,其中一级缓存和二级缓存都是在Executor中完成的。

(二)常见的查询优化器

1.RBO基于规则的优化器(Rule-based Optimizer)

  • 在优化器里面嵌入若干种规则,执行的SQL语句符合哪种规则,则按照哪种规则制订出相应的执行计划。比如:表上有个索引,如果谓词上有索引列的存在,则一定会选择走索引,否则选择走全表扫描。

2.CBO基于成本的优化器(Cost-based Optimizer)

  • 它是看语句的代价(Cost)了,这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小 、有少行、每行的长度等信息。

     参考文献:
     SQL查询优化器浅析 周东炎https://bytedance.feishu.cn/file/boxcn9uWBTLWg2a8GIUSRJ0Txqb