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;