PG 索引内部结构验证

索引结构验证:

一层结构:

create table tab1(id int primary key,info text);

insert into tab1 select generate_series (1,100),md5(random()::text);

创建一个表插入一百条数据。

对表进行分析:

vacuum analyze tab1;

查看meta层信息:

select * from bt_metap('tab1_pkey');

可以看到root块为1,当前有0层,有100条数据。

查看根块的统计:

select * from bt_page_stats('tab1_pkey',1);

可以看到btpo为0,是第0层。

所以这个根块既是根块又是页块 btpo_flags=2+1=3。

查看root(leaf)页里面的内容

select * from bt_page_items('tab1_pkey',1);

共100行。

可以通过ctid查询表。

二层结构:

插入大量数据使叶块分裂。

insert into tab1 select generate_series(101,10000),md5(random()::text);

查看meta层信息

此时可以看到 root为3,表明根块变成了第3块了(刚才根块是第一块),level=1,现在有两层,根块在第0层。

查看根块信息:

可以看到第三块是根块,btpo_flags=2.

查看根块里面的内容:

可以看到,根块里面现在存放的是叶块的指针。

再看一下刚才的第一个块。

可以看到,他变成叶块了,属于第0层。

查看页块的数据。

可以看到页块存放了实际的数据,这与B树的性质不谋而合。

三层结构:

继续插入数据,导入B树增长到3层。

insert into tab1 select generate_series(10001,1000000),md5(random()::text);

查看meta层信息:

根块变成第412块了,现在有三层(level=2)。

查看根块信息

查看根块内容

可以看到根块里面存放了枝块的指针。原来(3,0)是根块,现在变成枝块了。

看这个枝块的信息

他的标记变成0了,是一个枝块,属于第1层。

索引结构由autovacuum维护。

pg也支持hash索引:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值