openGauss源码解析(96)

openGauss源码解析:SQL引擎源解析(11)

6.3.3 物理路径

在数据库中,路径使用path结构体来表示,path结构体“派生”自Node结构体,path结构体同时也是一个“基”结构体,类似于C++中的基类,每个具体路径都从path结构体中“派生”,例如索引扫描路径使用的IndexPath结构体就是从path结构体中“派生”的。

typedef struct Path

{

NodeTag type;

NodeTag pathtype; /* 路径的类型,可以是T_IndexPath、T_NestPath等 */

RelOptInfo *parent; /* 当前路径执行后产生的中间结果 */

PathTarget *pathtarget; /* 路径的投影,也会保存表达式代价*/

/* 需要注意表达式索引的情况*/

ParamPathInfo *param_info; /* 执行期使用参数,在执行器中,子查询或者一些特殊*/

/* 类型的连接需要实时的获得另一个表的当前值 */

Bool parallel_aware; /* 并行参数,区分并行还是非并行 */

bool parallel_safe; /* 并行参数,由set_rel_consider_parallel函数决定 */

int parallel_workers; /* 并行参数,并行线程的数量 */

double rows; /* 当前路径执行产生的中间结果估计有多少数据 */

Cost startup_cost; /* 启动代价,从语句执行到获得第一条结果的代价 */

Cost total_cost; /* 当前路径的整体执行代价 */

List *pathkeys; /* 当前路径产生的中间结果的排序键值,如果无序则为NULL */

} Path;

posted @ 2024-04-30 10:11  openGauss-bot  阅读(6)  评论(0编辑  收藏  举报