陈老师:1415968548 郑老师:2735197625 乐老师:354331153
客服热线:
19941464235 / 19906632509 / 19906733890 / 19905812933(微信同号)

客服微信

【PostgreSQL】postgres中B-tree 索引结构深度解析

作者:炎燚小寶
发布时间:2024-06-20 09:13
浏览量:525

注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。


一、B-tree索引的结构

在PostgreSQL中,B-tree索引的结构包括几种类型的页面:meta page、root page、branch  page和leaf page。
1. Meta Page:Meta page是B-tree索引的元数据页面,它包含了关于索引的一些元信息,例如根页面的位置、最后一次vacuum的位置等。每个B-tree索引都有一个meta page。
2. Root Page:Root page是B-tree索引的顶层页面。在一个空的或者只有少量数据的B-tree索引中,root page可能同时也是leaf page。随着数据的增加,root page可能会变成branch  page,它的主要作用是指向其他的branch  page或leaf page。
3. branch  Page:branch  page位于B-tree索引的中间层级,它包含了指向其他branch  page或leaf page的指针。
4. Leaf Page:Leaf page是B-tree索引的底层页面,它包含了实际的索引条目,即指向表中行的指针。


二、实验研究

2.1 扩建扩展


2.2 准备数据



2.3 btree索引第一层构架

1)查看meta块--bt_metap

此时level为0即高度为1,root块为1。

2)查看root page--bt_page_stats


参数解释

3)查看指定索引块内容--bt_page_items

我们从官网资料可以得知,索引里存的是行的rowid和对应的索引列值。上面的查询就可以验证这一点

2.4 btree索引第二层构架


模拟更多的数据插入,增加索引块




1)查看meta块--bt_metap


索引高度由0变成1,同时root块发生了变化,由blk1变成blk3。

2)查看root page--bt_page_stats



可以看出来,此时root块既是root块,也是leaf块


3)查看指定索引块内容--bt_page_items




4)查看leaf块中的数据



2.5 btree索引第三层构架


模拟更多的数据插入,增加索引块




1)查看meta块--bt_metap

root块再次发生变化, 同时索引level也变成3层(level2+1),此时根枝叶块全部生成。




2)查看root page--bt_page_stats

btpo_flags=2 表示该块是root块


3)查看指定索引块内容--bt_page_items

可以看到,root块链接的branch块明显增加


4)查看branch块中status的信息


btpo_flags=0,确认root块中存的item是branch块

5)查看branch块中item的信息


三、总结

通过上面的实验,对比下图索引结构,我们对pg数据库中的索引有了初步了解,对后续学习索引优化有大的帮助。



想了解更多PG相关的学习资料(技术文章和视频),可以微信公众号或B站搜索《云贝教育》,免费获取。

想了解更多PG相关的学习资料(技术文章和视频),可以微信公众号或B站搜索《云贝教育》,免费获取。

想了解更多PG相关的学习资料(技术文章和视频),可以微信公众号或B站搜索《云贝教育》,免费获取。


另外需要学习资料 的同学,可以添加联系方式:(同V) 陈老师 199-4146-4235 / 郑老师 199-0663-2509 / 蕾老师199-0663-5786,我们会持续更新学习视频。



试听视频:【云贝教育】深入浅析Postgres索引结构