PostgreSQL计划器add path函数简介
本文适用于PG 14。
pg_plan_queries
- snippet.c
List *pg_plan_queries(List *querytrees, const char *query_string, int cursorOptions, ParamListInfo boundParams);
计划器的入口函数。
populate_joinrel_with_paths
- snippet.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
- snippet.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
- snippet.c
void add_paths_to_joinrel(PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, SpecialJoinInfo *sjinfo, List *restrictlist);
Join算法评估,会对所以可用Join算法进行评估,最后仅保留最优算法。
打赏作者以资鼓励:
![]() | ![]() |