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

127 阅读2分钟

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

这是我参与【第四届青训营-大数据场】笔记创作活动的第1天

SQL的处理流程图

image.png parser把SQL的输入变成了AST的一个输出,之后会经过Analyzer的一个处理输出Logical Plan逻辑的计划,之后会经过一个Optimizer优化器处理。然后输出一个Physical Plan物理的执行计划。然后会交给Executor 执行,然后处理数据,然后返回数值给用户

  1. Parser是把文本变成抽象语法树结构(AST)
  • String 进行语法分析和词法分析
  • 进行词法分析时是对拆分字符串得到关键词,数字常量,字符串常量,用算符号等
  • 对语法进行分析时是将token组成的norton最终得到一个AST
  1. Analyzer是判断 SQL 是否合理,比如数据中的数据,表以及列名是否存在,列的数据类型是否正确,Analyzer输入是一个抽象语法数输出是一个逻辑的执行计划

image.png 3. Flex 是用来做词法分析的,Bison 是用来做语法分析的
4. SCAN是算子,JOIN是连接,然后做聚合
5. JOIN右边必须是算子
6. 查询优化

  • SQL是一种声明式语言,用户只描述做什么,没有告诉数据库怎么做
  • 使用SQL的目的是为了查找一个正确且执行代价最小的物理执行计划,查询优化器是数据库的大脑,一般SQL月复杂Join的表越多,数据量越大,查询优化的意义就越大
  1. Plan Fragment是分布式执行计划,使用它的目的是为了最小化网络数据的传输,并且利用上数据的物理分布和物理的亲和性来增加shuffle算子
  2. Executor可进行单机执行和多机执行两种模式