FAIRYFAR-INTERNAL
 
  FAIRYFAR-INTERNAL  |  SITEMAP  |  ABOUT-ME  |  HOME  
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算法进行评估,最后仅保留最优算法。



打赏作者以资鼓励:
移动端扫码阅读: