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

105 阅读2分钟

一、大数据体系和SQL

1)大数据体系中的SQL

2)SQL的处理流程

SQL的处理主要包括解析(parse)、执行(execute)、提取(fetch)几个步骤。

01.One SQL rules big data all

02.SQL需要依次经过Parser,Analyzer,Optimizer和Executor的处理

03.查询优化器是数据库的大脑,在大数据场景下对查询性能至关重要

04.查询优化器需要感知数据分布,充分利用数据的亲和性

05.查询优化器按照最小化网络数据传输的目标把逻辑计划拆分成多个物理计划片段

 

二、常见的查询优化器

1)常见的优化器逻辑分为两类,一类叫“基于规则的优化(RBO)”,另一类称为“基于代价的优化(CBO)”,实际应用过程中应当两类兼顾才能取得最佳效果。

2)基于规则的优化

根据优化规则对关系表达式进行转换,这里的转换是说一个关系表达式经过优化规则后会变成另外一个关系表达式,同时原有表达式会被裁剪掉,经过一系列转换后生成最终的执行计划。RBO中包含了一套有着严格顺序的优化规则,同样一条SQL,无论读取的表中数据是怎么样的,最后生成的执行计划都是一样的。同时,在RBO中SQL写法的不同很有可能影响最终的执行计划,从而影响脚本性能。

3)基于代价的优化

根据优化规则对关系表达式进行转换,这里的转换是说一个关系表达式经过优化规则后会生成另外一个关系表达式,同时原有表达式也会保留,经过一系列转换后会生成多个执行计划,然后CBO会根据统计信息和代价模型(Cost Model)计算每个执行计划的Cost,从中挑选Cost最小的执行计划。

 

三、社区开源实践

1)主流的查询优化器都包含RBO和CBO

2)Apache Calcite是大数据领域很流行的查询优化器

3)Apache Calcite RBO定义了许多优化规则,使用pattern匹配子树,执行等价变换

4)Apache Calcite CBO基于Volcano/Cascade框架

5)Volcano/Cascade 的精髓:Memo、动态规划、剪枝

 

四、前言趋势

1)大数据创业如火如荼,SQL查询优化器仍然是必不可少的一个重要组件

2)引擎架构的进化、云原生、湖仓一体等对SQL查询优化器有新的要求和挑战

AlI加持,学习型查询优化器在不断进化