本文适用于PG 14。 ## pg_plan_queries ```c List *pg_plan_queries(List *querytrees, const char *query_string, int cursorOptions, ParamListInfo boundParams); ``` 计划器的入口函数。 ## populate_joinrel_with_paths ```c static void populate_joinrel_with_paths(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, RelOptInfo *joinrel, SpecialJoinInfo *sjinfo, List *restrictlist); ``` 将给定的Join关系rel1和rel2,添加到joinrel,Join的描述信息在sjinfo。 ## try_partitionwise_join ```c static void try_partitionwise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, RelOptInfo *joinrel, SpecialJoinInfo *parent_sjinfo, List *parent_restrictlist); ``` 尝试使用 Partition-wise Join(智能分区Join)。如果多个分区表的查询满足特定连接条件(如拆分键上的等值连接),则可将其转换为多个子分区的局部 JOIN,然后再将局部 JOIN 的结果 `UNION ALL` 起来。 ## add_paths_to_joinrel ```c void add_paths_to_joinrel(PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, SpecialJoinInfo *sjinfo, List *restrictlist); ``` Join算法评估,会对所以可用Join算法进行评估,最后仅保留最优算法。