暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss 索引方法

suger 2022-12-31
365

索引方法

B-Tree索引

B-tree索引适合比较查询和范围查询,当查询条件使用(>,=,<,>=,<=)时,可以使用B-tree索引。B-tree索引是PostgreSQL和openGauss的默认索引方式。


B-tree索引页分为几种:meta-page、root-page、branch-page和leaf-page,如图-1所示。

meta-page: B-tree索引的元数据页,主要存储B-tree索引的元数据信息,可以通过meta page找到root page信息。

root-page:B-tree的根节点。

branch-page:内部节点,B-tree中根节点和叶子节点外的其他节点。

leaf-page:叶子节点,其中的ctid指向heap tuple,非叶子节点的ctid指向其子节点。

安装pageinspect后,可以通过:

select * from bt_metap(‘tab_pkey’) 查看meta-page 信息

select * from bt_page_stats(‘tab_pkey’,1) 查看索引页信息

select * from bt_page_items(‘tab_pkey’,1) 查看页内tuple信息

index page 结构如图-2所示。

High-Key表示此page的右兄弟节点的最小值,由于page之间数据是有序的,当前page内所有key <= High-Key的值。对unique index而言,当前page内所有key < High-Key的值。

每一层的最右侧节点,由于没有右兄弟节点,因此page内没有High-Key。

Special Space为索引页特有,由于存储每个page左右两边page的页号,可通过Special Space找到左右page。



图-2 B-tree索引页结构

以上是行存引擎的B-tree索引结构,列存的B-tree索引整体结构上与行存相同。leaf-page上行存存储的是key到ctid的映射关系,行存可以直接ctid中的block number及offset找到heap tuple的位置。列存的ctid中记录的是(cu_id, offset),还需要再对应的CUDesc表中根据cu_id列的索引找到对应的CUDesc记录,打开对应的CU文件,根据offset找到数据。

列存上的B-tree索引不支持创建表达式索引、部分索引和唯一索引。





原文链接:https://blog.csdn.net/enmotech/article/details/119362121

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论