
文章转载自公众号:AustinDatabases
PostgreSQL的版本升级一直很快,阿里云上的POSTGRESQL RDS已经支持到了14,那么在创建新的数据库到底应该选择哪个版本,不言而喻,PG14。
从索引上可以看看到底这几年PG 12 -- PG13 -- PG 14 他们都做了些什么改进,为什么PG是最高级的开源数据库。
First,INDEX对于数据库来说是一个核心的功能,从上世纪这个功能就存在并且一直是众多数据库快速查询的生命线。
对于POSTGRESQL本身来说索引的添加与维护与其他的数据库比较并不是一件简单的事情,MVCC在每个表中产生多个版本,让索引的维护也变得不哪里简单。索引本身也会有bloat的问题,占用更多的空间的问题等等,数据修改后,尤其大批量修改后索引的消耗问题应该被重视。
之前的索引在page页面的存储本身并不是有序存储的,这会造成两个问题
index会在数据的插入中,由于数据存放的不顺序,导致数据从中间的页面进行分割,然后浪费页面存储的空间
页面不连续查询索引的效率低下
PG12 中将数据的物理地址ctid和索引存储在一起,成为索引的一部分,这样的好处
索引物理数据存储变得有序 索引的物理页面的分割不在从中间分割,而是最右端分割
好处也是显而易见,进行主键index scan速度会更快,同时节省了INDEX存储空间

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

PG12.2

PG12 索引大小408MB,544-408=136MB 同样的功能和表,索引的大小减小了136MB.
查询速度,对比看同样查询索引命中的数据PG11比PG12慢了60%


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


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





新闻|Babelfish使PostgreSQL直接兼容SQL Server应用程序
中国PostgreSQL分会入选工信部重点领域人才能力评价机构

更多新闻资讯,行业动态,技术热点,请关注中国PostgreSQL分会官方网站
https://www.postgresqlchina.com
中国PostgreSQL分会生态产品
https://www.pgfans.cn
中国PostgreSQL分会资源下载站
https://www.postgreshub.cn


点击此处阅读原文
↓↓↓




