SQL查询优化器|青训营笔记
这是我参加「第四届青训营 」笔记创作活动的第1天
1.SQL的处理流程
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)