openGauss 之索引回表

一. 前言

​       在openGauss中如果表有索引信息,查询的谓词条件中又包含索引列,openGauss支持通过索引信息快速拿到需要访问元组的位置信息,然后直接到该位置上取出元组数据,称之为回表查询。如下所示,利用索引索引列id=55快速找到t111上对应元组的位置信息,然后通过位置信息拿到id为55的元组中所有列的数据。

    本文通过走读openGauss的代码了解openGauss是怎样实现回表查询的。

二.  Insert处理

​       要想实现能快速回表,那么insert时需要保存索引和物理表的位置信息关系。openGauss的insert的入口在ExecInsertT中,保存索引列与元组的位置信息代码流程如下所示:

ExecInsertT
    pTSelf = tableam_tops_get_t_self(result_relation_desc, tuple) // pTSelf保存着的是索引对应物理表元组位置信息
        relation->rd_tam_ops->tops_get_t_self(tup);
            HeapamTopsGetTSelf
                return tup->t_self   // 元组的物理表位置信息,即元组的t_self
    ExecInsertIndexTuples
        index_insert(..values, tupleid...)  // value为索引值,tupleid为对应物理表中元组位置信息
            btinsert_internal
                _bt_doinsert
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值