PG通过表访问方法API如何执行顺序扫描

PG通过表访问方法API如何执行顺序扫描

引言

PG中有很多方法检索数据并返回给用户。依赖于用户的SQL语句,查询计划模块生成最有方法以检索请求的数据。顺序扫描是用户请求大量数据时或者当表没有索引时使用的一种检索方法(例如select * from tablename;);顺序扫描方法由表的表访问方法APIchuli,heap表访问方法时当前版本中默认的方法。本文中,将会介绍表访问方法API如何进行顺序扫描。

PG中表访问方法APIs

PG12中引入了可拔插表访问方法,允许开发者重定义存储/检索表数据的方法。这个API包含42个函数。定义在tableam.h中,这些接口函数在typedef struct TableAmRoutine中。下面介绍关于顺序扫描的routine,帮助开发这了解如何创建自己的表访问方法。

顺序扫描的调用栈

42个routines中很少由一个会被执行器调用来完成顺序扫描的请求。本节按调用顺序描述这些接口。

relation_size

函数声明:uint64  (*relation_size) (Relation rel, ForkNumberforkNumber);

Relation_size函数是第一个被调用的函数,相对简单。通过rel和forkNumber,返回对于文件的大学。默认heap表访问方法会调用存储管理器smgr,计算出对于表文件的页数,然后成语每个页大小BLCKSZ默认8KB。如果不确定表和forknumber之间的关系,可以查询网址https://www.highgo.ca/2020/10/23/free-space-mapping-file-in-details/了解更多信息。

返回的大小设置顺序扫描的边界。

slot_callbacks

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值