表扫描描述符及扫描方向

简介: 表扫描描述符及扫描方向


1、表扫描函数的参数传递通过TableScanDescData,函数内层将扫描到的记录存储到HeapScanDesc.rs_ctup中,然后将该成员内容传递给slot中。

2、内部处理时会将TableScanDescData转换成HeapScanDesc类型,其第一个成员变量是TableScanDescData类型,方便类型强制转换。

3、HeapScanDesc结构成员:

  TableScanDescData rs_base:描述符中AM独立部分

  BlockNumber rs_nblocks:表中总共有多少数据页

  BlockNumber rs_startblock:从哪一页开始进行扫描

  BlockNumber rs_numblocks:最多扫描多少页,范围扫描中使用

  boolrs_inited;该扫描描述符是否已初始化,第一个记录时初始化,扫描后面的不再初始化,从上一次保存的数据页中取下一个记录

  BlockNumber rs_cblock:当前扫描的文件页页号

  Bufferrs_cbuf:当前扫描的内存页页号

  BufferAccessStrategy rs_strategy:扫描策略,使用哪种内存描述符获取方法:

  参考:

  https://blog.csdn.net/yanzongshuai/article/details/103659270

  https://blog.csdn.net/yanzongshuai/article/details/103795628

  https://blog.csdn.net/yanzongshuai/article/details/103798038

  https://blog.csdn.net/yanzongshuai/article/details/103828829

  https://blog.csdn.net/yanzongshuai/article/details/103839702

  HeapTupleData rs_ctup:扫描到的记录存储到这个位置

  int rs_cindex:扫描的记录索引号

  int rs_ntuples:该页中总共有多少记录

  OffsetNumber rs_vistuples[MaxHeapTuplesPerPage]:page at a time下该页所有可见记录的索引号保存在这个数组中。


关于扫描方向:


ForwardScanDirection:向前

BackwardScanDirection:向后

NoMovementScanDirection:重新获取记录

这里的方向和理解的有点不一样,需注意。

目录
相关文章
|
安全 网络协议 物联网
GOBY扫描篇
GOBY扫描篇
1194 0
GOBY扫描篇
|
2月前
|
Web App开发 JSON 网络协议
|
7月前
|
SQL 存储 索引
12. 知道什么叫覆盖索引嘛 ?
**覆盖索引**是指在SQL查询中,索引包含所有所需列数据,避免回表查询,提高效率。创建覆盖索引可通过为查询字段建立联合索引,如在`user`表上为`name`和`age`创建`index_name_age`索引。查询`select name,age from user where name='Alice'`时,索引中已包含`name`和`age`,直接返回结果,实现覆盖索引。
64 0
12. 知道什么叫覆盖索引嘛 ?
|
4月前
|
安全 网络协议 网络安全
|
存储 SQL 缓存
B+树索引使用(9)分组、回表、覆盖索引(二十一)
B+树索引使用(9)分组、回表、覆盖索引(二十一)
419. 甲板上的战舰 : 几种「扫描限制」&「空间限制」做法
419. 甲板上的战舰 : 几种「扫描限制」&「空间限制」做法
|
存储 关系型数据库 PostgreSQL
索引顺序扫描引发的heap scan IO放大, 背后的统计学原理与解决办法
标签 PostgreSQL , 优化器 , 索引扫描 , 堆扫描 , IO放大 背景 通过B-TREE索引扫描可能会带来了巨大的heap page scan数目,即IO的放大. 为什么呢? 示例视频如下 : http://www.tudou.com/programs/view/yQ0SzBqx_4w/ 如果数据库的单个数据块(block_size)很大的话, 这种情况带来的负面影响也将被放大. 例如32k的block_size显然比8k的block_size扫描开销更大. 本文将讲解一下索引扫描引发的heap page scan放大的原因, 以及解决办法。
3824 0
|
Java Scala
slick对超过22个属性的表进行映射的两种办法
版权声明:本文为博主原创文章,未经博主允许不得转载 slick是scala的一个FRM(Functional Relational Mapper)框架,即函数式的关系数据库编程工具库。使用slick不同于使用java的hibernate或者是mybatis,对其进行迭代开发非常方便,因为其对表的映射基于函数式的编程方式。
1124 0
|
安全 网络协议 数据安全/隐私保护
|
安全 网络协议 网络安全