注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
一、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数据库中的索引有了初步了解,对后续学习索引优化有大的帮助。
参考学习视频 【云贝教育】深入浅析Postgres索引结构