KSTORE优化器理论剖析
#KSTORE单节点优化器
1 优化器输入
Query结构
2 优化器输出
Plan树形结构
3 优化器主要接口
- 对外主接口是planner
- 实际主要进行工作的接口是subquery_planner(会递归调用)
4 主要工作流程
4.1. 规则优化
4.1.1. 物化视图
4.1.2. 消除子链接中没有意义的distinct,orderby,groupby
4.1.3. 提升含有聚集函数的子查询
4.1.4. 目标列/groupby常量性/空值改写规则
4.1.5. distinct消除规则
4.1.6. 消除排序规则
4.1.7. 含group字查询提升为视图
4.1.8. 提升子查询
4.1.9. 提升视图
4.1.10. 消除聚集函数
4.1.11. kscount
4.1.12. distinct agg改写
4.2. 目标列预处理
4.2.1. 计算目标列中的常量表达式 op/distinct/or/and/not等
4.2.2. 将SubLink转换成SubPlan
一般为lefthand oper subselect的形式,例如where a in (select a from test)
- lefthand一般为目标列或目标列相关的的表达式,一般为Var(where a in(subselect))/Expr(where a + 1 in(subselect))
- op一般为exists/all/any/in/not in/=等
- subselect一般为查询
之后对subselect进行subquery_planner,将其生成为SubPlan