所谓堆表,是指元组无序存储,数据按照“先来后到”的方式存储在页面中的空闲位置。作为对比,在索引表中,元组根据索引键键值的排序,在页面内部有序存储,且各个页面之间在逻辑上也是有序存储的。堆表存储数据主体,索引表仅存储索引键键值以及对应的、完整元组的物理位置(即完整元组在堆表中的页面号和页内偏移)。
HOT技术(堆内元组技术),在更新时通过修改指针指向定位新元组,而不需要插入相应的索引元组。
在更新tuple1时,会将tuple1(老元祖)的标记位置为heap_hot_update,同时tuple2(新元组)的标记位置为heap_only_tuple。
Heap_Only_tuple说明是hot-chain中的新元组
假设page中有个元组被多次hot更新,只有最老的元组是Heap_hot_Update
只有最新的元组是heap_only_tuple
其他元组既是Heap_hot_Update又是heap_only_tuple
下面对数据库中有关堆表操作的函数进行分析,介绍函数的作用和执行流程,具体细节可以结合openGauss的源码一起浏览。
堆表访问接口函数
Relation heap_open(Oid relationId, LOCKMODE lockmode, int2 bucketid)
#define heap_close(r,l) relation_close(r,l)
TableScanDesc heap_beginscan(Relation relation, Snapshot snapshot, int nkeys, ScanKey key, RangeScanInRedis rangeScanInRedis)
static HeapScanDesc heap_beginscan_internal(Relation relation, Snapshot snapshot, int nkeys,

本文详细介绍了数据库中的堆表概念,包括堆表的无序存储特性及与索引表的区别。堆表存储数据主体,索引表存储索引键。HOT技术在更新时避免插入新的索引元组。文章还解析了数据库操作函数如heap_open、heap_beginscan、heap_getnext等,涉及扫描、插入、删除和更新等操作,以及如何处理堆表中的hot更新元组。
最低0.47元/天 解锁文章
444

被折叠的 条评论
为什么被折叠?



