SQL 查询优化器(SQL Optimizer)| 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第1天
常见查询优化器
Top-dowm Optimizer
Bottom-up Optimizer
RBO(Rule-based Optimizer)
- RBO优化原则:列裁剪(可以把查询中算子用不到的字段(列)过滤掉,使得扫描的数据量减少)、谓词下推(比如where就是谓词,让谓词算子(过滤条件)下推尽早被执行,避免掉一些不必要的数据)、传递闭包(从谓语算子找到隐藏的传递性,推到出新的过滤条件,再进行谓词下推)、Runtime Filter(在算子执行后,把它的数据传递给其他算子,充分利用单个算子的信息在整个执行计划)
- 主流RBO实现一般都有几百条基于经验归纳得到的优化规则
- 优点:实现简单,优化速度快
- 缺点:不保证得到最优的执行计划
CBO(Cost-based Optimizer)
- 统计信息+推导规则-->计算算子代价-->计算执行计划代价-->执行计划枚举 (使用一个模型估算执行计划的代价,选择代价最小的执行计划。)
- CBO使用代价模型和统计信息估算执行计划的代价
- CBO使用贪心或者动态规划算法寻找最优执行计划
- 在大数据场景下CBO对查询性能非常重要
查询优化器相关的社区开源实践
- 主流优化器都包含RBO和CBO;
- Apache Calcite是大数据领域很流行的查询优化器
- Apache Calcite RBO定义了许多优化规则,使用pattern匹配子树,执行等价变换
- Apache Calcite CBO基于Volcano\Cascade框架
- Volcan\Cascade框架的精髓是:Memo、动态规划、减枝
前沿趋势
- 引擎架构的优化,存储计算分离,一体化(HTAP、HSAP、HTSAP)
- Cloud,云原生,serverless
- 湖仓一体,Query Federation
- data+ai(AI4DB\DB4AI):AI4DB包括智能调参、负载调度、统计信息估计等;DB4AI包括内嵌人工智能算法(MLSQL)、内嵌机器学习框架(SparkML)