postgresql 12 13 14 在索引上都进行了什么 (1 Btree index 优化 为什么要升级到PG12)...

38893ba2f1bac1d4e3e6248d3e003670.png

PostgreSQL 的版本升级一直很快,阿里云上的POSTGRESQL RDS 已经支持到了14 ,那么在创建新的数据库到底应该选择哪个版本,不言而喻,PG14。

从索引上可以看看到底这几年PG 12 -- PG13 --PG 14 他们都做了些什么改进,为什么PG 是最高级的开源数据库。

First,INDEX  对于数据库来说是一个核心的功能,从上世纪这个功能就存在并且一直是众多数据库快速查询的生命线。

对于POSTGRESQL 本身来说索引的添加与维护与其他的数据库比较并不是一件简单的事情,MVCC 在每个表中产生多个版本,让索引的维护也变得不哪里简单。索引本身也会有bloat 的问题,占用更多的空间的问题等等,数据修改后,尤其大批量修改后索引的消耗问题应该被重视。

之前的索引在page页面的存储本身并不是有序存储的,这会造成两个问题

1  index 会在数据的插入中,由于数据存放的不顺序,导致数据从中间的页面进行分割,然后浪费页面存储的空间

2  页面不连续查询索引的效率低下

PG12  中将数据的物理地址ctid 和和索引存储在一起,成为索引的一部分,这样的好处

1  索引物理数据存储变得有序

2  索引的物理页面的分割不在从中间分割,而是最右端分割

好处也是显而易见,进行主键index scan  速度会更快,同时节省了INDEX存储空间

c88d05cffafa0cd549b28ad8f069946d.png

PG11.7  测试结果 索引大小544MB

985bfa826a401ce5410f85336d205ed9.png

PG12.2

3dd5e39c3906200420708f0947196807.png

PG12 索引大小408MB, 544 -408 = 136MB 同样的功能和表,索引的大小减小了136MB.

查询速度,对比看同样查询索引命中的数据 PG11 比PG12 慢了 60%

9d3d058e8bae3d231634c9345821ab05.png

5fee9f9852fa39ea2e89a98054fd3e8d.png

打开两个表的索引内部的数据,可以查看PG12 中的 CTID 中物理数据存储是有序的,PG11 中的CTID 中的数据存储是无序的。

f2209f5604501803a16bc55fd798051e.png

4d1bcb1563d1c9c205f68ed7b382d58d.png

同时使用RDS 云的同学,虽然从11 升级到12很方便,但升级后的索引的顺序方面不会有改变,需要对PG11 升 12 的索引进行reindex.

参考文章:德哥关于pg12 索引改善的文字

https://www.alibabacloud.com/blog/postgresql-12-b-tree-index-improvements-duplicate-key-and-sort-by-ctid_597615

a56311ac945f2438d3fb6af1bbc89389.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值