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

时间:2022-09-30 23:00:32

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

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存储空间


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



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

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


PG12.2

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


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


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

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


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


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


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


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


同时使用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​


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