postgresql源码(六)——Executor(查询执行策略)

本文深入解析查询执行器的五大组成部分及工作原理,包括查询优化策略、不同语句类型的执行方式等,介绍了执行策略的选择与执行过程。

从以下五个部分介绍查询执行模块(很可能要分成四到五篇文章来阐述,毕竟是比查询规划还要复杂的模块):

1.查询优化策略
2.非可优化语句的执行
3.可优化语句的执行
4.计划节点
5.其它子功能介绍

查询执行器的框架结构如下图所示。
 

在exec_simple_query函数中,调用查询编译模块之后,就进入了查询执行器模块。在该模块中,就是按照前一阶段查询规划模块锁生成的查询计划,有机第调用存储、索引,并发等模块来完成数据的读取或者修改的过程。

在本模块中,总共下属四个子模块,分别是:Portal、ProcessUtility、Executor和其他特定子功能模块。

我们知道,查询规划阶段将查询分为两种类型,在查询执行模块中,先由Portal模块识别查询类型(有计划树和无计划树),根据查询类型分别指派Executor模块和ProcessUtility模块进行处理。

这两个子模块的处理逻辑相差很大,执行过程和先关数据结构差异也很大。

对于Executor模块,它根据输入的查询计划树按部就班地处理数据表中元组的增删改查(DML)操作,它的执行逻辑是统一的(所有的增删改查最后都归结为SELECT,只是分别在SELECT的基础上进行一些额外的操作)。其主要代码放在src/backend/executor下。

而对于ProcessUtility模块,由于处理的是除了增删改查之外的所有其他操作,而这些操作往往差异很大,例如数据定义操作(DDL),事务的处理以及游标用户角色定义这些,因此在ProcessUtility模块中,为每种操作单独地设计了子过程(函数)去处理。主要代码在src/backend/commands下。

而剩下的我说的特定功能子模块,是指一些功能相

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值