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

132 阅读2分钟

SQL查询优化器 | 青训营笔记 这是我参与「第四届青训营 」笔记创作活动的的第1天

1.大数据体系和SQL SQL处理流程 :Parser、Analyzer、LogicalPlan、Optimizer、Physical Plan、 Executor。 SQL是一种声明式语言,用户只描述做什么,没有告诉数据库怎么做 ; 目标:找到一个正确且执行代价最小的物理执行计划 ; 查询优化器是数据库的大脑,最复杂的模块,很多相关问题都是NP的 ; 一般SQL越复杂, Join 的表越多,数据量越大,查询优化的意义就越大因为不同执行方式的性能差别可能有成百上干倍 。

One SQL rules big data all ; SQL需要依次经过Parser,Analyzer,Optimizer和Executor的处理 ; 查询优化器是数据库的大脑,在大数据场景下对查询性能至关重要; 查询优化器需要感知数据分布,充分利用数据的亲和性; 查询优化器按照最小化网络数据传输的目标把逻辑计划拆分成多个物理计划片段 。

2.常见查询优化器 2.1 RBO(Rule-based Optimizer) RBO优化原则:列裁剪、谓词下推、传递闭包、Runtime Filter ; 主流RBO实现一般都有几百条基于经验归纳得到的优化规侧则 ; 优点:RBO实现简单,优化速度快 ; 缺点:RBO不保证得到最优的执行计划 。 2.2 CBO(Cost-based Optimizer) 统计信息+推导规则→计算算子代价→计算执行计划代价→执行计划枚举 ; CBO使用代价模型和统计信息估算执行计划的代价 ; CBO使用贪心或者动态规划算法寻找最优执行计划 ; 在大数据场景下CBO对查询性能非常重要 。

3.开源社区实践 主流的查询优化器都包含RBO和CBO ; Apache Calcite是大数据领域很流行的查询优化器 ; Apache Calcite RBO定义了许多优化规则,使用pattern匹配子树,执行等价变换 ; Apache Calcite CBO基于Volcano/Cascade框架 ; Volcano/Cascade的精髓:Memo、动态规划、剪枝。

4.前言趋势 大数据创业如火如荼,SQL查询优化器仍然是必不可少的一个重要组件 ; 引擎架构的进化、云原生、湖仓一体等对SQL查询优化器有新的要求和挑战 ; AI加持,学习型查询优化器在不断进化。