文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之二十一

接前面: 回到mdopen上来,看看是谁调用了 mdopen,又获得了什么。 /* * mdnblocks() -- Get the number of blocks stored in a relation. * * Important side effect: all active segments of the relation are opened * ...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之二十三

再次回到  estimate_rel_size 我发现, 在入口参数 rel中, rel->rd_rel->reltuples 的值已经完全准备好了: /* * estimate_rel_size - estimate # pages and # tuples in a table or index * * We also estimate the fraction...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之二十二

接前面。 回到程序调用关系上来: estimate_rel_size -> RelationGetNumberOfBlocks->RelationGetNumberOfBlocksINFork ->Smgrnblocks->mdnblocks... 折腾了一圈,就是为了评估一个表的大小。 那么,我们所获得的block,它到底是个什么单位? BlockNumber md...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之二十四

接前面,回到 get_relation_info(plancat.c)函数 上: relation 是由 heap_open 函数调用后获得的。 void get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent, RelOptInfo *rel) { Ind...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之二十五

再次梳理  build_simple_rel 的执行内容: /* * build_simple_rel * Construct a new RelOptInfo for a base relation or 'other' relation. */ RelOptInfo * build_simple_rel(PlannerInfo *root, int relid, RelO...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之二十六

接前面,再次上溯一个层次,看代码(planmain.c :query_planner): void query_planner(PlannerInfo *root, List *tlist, double tuple_fraction, double limit_tuples, Path **cheapest_path, Path **...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之二十七

接前面,仔细看这个 :这 add_base_rels_to_query 是个递归调用嘛。 想像一下: select  * from tst01  where id in (select sid from tst02)  or id in (select sid from tst03) 之类的,此函数将层层深入,构造一个二叉树式样的语法树。 void add_base_...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之二十八

simple_exec_query函数中,有如下一句: plantree_list = pg_plan_queries(querytree_list, 0, NULL); 那么,plantree_list 里面,到底有什么,让我来给它大卸八块: plantree_list 是List *类型(指向List 的指针): typedef struct List { NodeTag ...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之二十九

接前面,继续分析 ChoosePortalStrategy: /* * ChoosePortalStrategy * Select portal execution strategy given the intended statement list. * * The list elements can be Querys, PlannedStmts, or utili...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之三十

接前面,继续分析: PortalStrategy ChoosePortalStrategy(List *stmts) { int nSetTag; ListCell *lc; /* * PORTAL_ONE_SELECT and PORTAL_UTIL_SELECT need only consider the * si...

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

产品推荐

相关镜像