CockroachDB 逻辑执行计划简单分析
来源:互联网 发布:人工智能第三版答案 编辑:程序博客网 时间:2024/06/08 08:52
代码位置
pkg/sql/plan.go
中的makePlan
层次结构解析
makePlan
主要是生成执行计划的作用。执行计划分为两个步骤:
1. newPlan 生成一个原始执行计划
2. optimizePlan 优化执行计划,生成最终执行计划
newPlan
会根据语句的类型生成对应的planNode。后续的说明会根据 selectCluase
解释说明。下图就是组成makePlan的代码部分。
optimizePlan
会在后续进行说明
selectCluase内部的结构
对应于selectCluase
,包含select语句的所有模块的处理操作(将AST
树转换成为执行计划树)。举例来说明:
SELECT l.id, r.name FROM user l INNER JOIN profile r on l.id = r.user_id WHERE r.location = "beijing";
initFrom : FROM user l INNER JOIN profile r on l.id = r.user_id
initWhere : where r.location = "beijing"
initTargets : SELECT l.id, r.name
groupBy, window, orderBy, Distinct, Limit: NULL
通过initFrom
, 生成的planNode
如下图所示:
- 1 renderNode
, 代表整体的select语句
- 2 renderNode
, 代表From内部的内容
- 3 joinNode
, 代表 l join r
- 4 scan
, 代表一个表或者索引
通过 initWhere
, 重新修改 planNode
,生成的新的 planNode
如下:
1,2,3,4 代表的意思不变。
- 5 filterNode
,代表 where r.location = "beijing"
通过 initTarget
, 重新修改 planNode
,增加ResultColumns
信息,不需画图,可自行看代码。
optimizePlan内部内容
包含两个优化方向:
1. triggerFilterPropagation
filter
部分的下推等操作
2. expandPlan
selection, sort optimization
等操作
上面的语句经过triggerFilterPropagation
下推操作:
经过 expandPlan
省略,主要是通过sort
的操作进行index
的选取等。具体实例可以参考IndexMergeJoin
。
- CockroachDB 逻辑执行计划简单分析
- CockroachDB 物理执行计划简单解析
- Pig源码分析: 逻辑执行计划模块
- Pig源码分析: 逻辑执行计划优化
- spark2.0原理分析--RDD Lineage(逻辑执行计划)
- 如何分析执行计划
- SQL执行计划分析
- SQL执行计划分析
- 如何分析执行计划
- ORACLE 执行计划分析
- ORACLE 执行计划分析
- SQL执行计划分析
- SQL执行计划分析
- oracle执行计划分析
- Mysql 执行计划分析
- Oracle执行计划分析
- Catalyst 优化逻辑执行计划规则
- Catalyst 优化逻辑执行计划规则
- 想要让游戏用户提高体验度,只需这样做!
- OpenGL Partical System by Transform Feedback
- CSS(二)
- 如何开启nfs服务?
- linux pgrep命令的使用
- CockroachDB 逻辑执行计划简单分析
- springboot实战之整合CommandLineRunner
- charles通过breakpoints修改web请求
- 为什么大数组要定义在main函数外
- SSM框架下查看项目依赖版本信息
- Eclipse项目报红叉
- 虚幻4导入序列帧动画
- C 清空输入缓冲区,以及fflush(stdin)的使用误区和解决方法
- js图片上传获取本地地址预览