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

124 阅读2分钟

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

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

1.SQL的处理流程

image.png

2.查询优化器分类 RBO(基于经验归纳得到的优化规则):

列裁剪;
谓词下推;
传递闭包(根据等价关系和过滤条件推导一个新的过滤条件);
Runtime Filter(构建哈希表)。 

主流RBO实现一般都有几百条基于经验归纳得到的优化规则

优点:实现简单,优化速度快。

缺点:不保证得到最优的执行计划。

CBO(使用模型估算执行计划的代价,选择代价最小的执行计划):

统计信息收集;
执行计划枚举(考虑三表连接)-动态规划。

CBO使用贪心算法或者动态规划算法寻找最优执行计划;在大数据场景下CBO对查询性能非常重要。

3.社区开源实践

Apache Calcite:

能够对接不同的处理器表达系统;定义插件定制更适用系统的优化规则。
模块化,插件化,稳定可靠。
支持异构数据模型:
关系型
半结构化
流式
地理空间数据

内置RBO和CBO

Calcite RBO

优化规则:

Pattern:匹配表达式子树

等价变换:得到新的表达式

遍历所有的rule,直到没有rule可以被触发。

优化速度快,实现简单,但是不保证最优。

基于Volcano/Cascade框架

成本最优假设

Memo(本质:ADN/OR graph。共享子树减少内存开销。)

存储候选执行计划

Group:等价计划集合

Top-down动态规划搜索

4.前沿趋势

DATA+AI:

AI 4 DB:

自配置
智能调参
负载预测/调度
自诊断和自愈合:错误恢复和迁移
自优化:
统计信息估计
代价估计
学习型优化器
索引/视图推荐

DB 4 AI:

内嵌人工智能算法(MLSQL,SQLFlow)
内嵌机器学习框架(SparkML,Alink,dl-on-filnk)

引擎架构的进化

存储计算分离

一体化(HTAP,HSAP,HTSAP)

Cloud(云原生,serverless)

湖仓一体(Query Federation)