PostgreSQL BRIN索引内核代码优化思考

点击查看全文

标签

PostgreSQL , BRIN 块级索引 , 扫描方法 , 数据结构 , pages_per_range算法


背景

BRIN是PostgreSQL 9.5新增的块级索引接口,存储了被索引字段在块级别的边界值(最大值、最小值)以及其他统计信息。

当需要对某个字段进行检索时,需要扫描整个BRIN索引(这个是BRIN索引内核层面将来值得优化的点)。然后跳过不符合条件的HEAP PAGE,扫描复合条件的HEAP PAGE。实现数据过滤的目的。

原理所致,对于建立BRIN索引的字段,相关性越好,BRIN索引的过滤性就越好。

BRIN同时还支持多种类型、多列字段等。

1、多列

2、单列

3、空间数据类型

如果你还对BRIN不了解,可以阅读我写过的一些案例文章。

《PostGIS空间索引(GiST、BRIN、R-Tree)选择、优化 – 阿里云RDS PostgreSQL最佳实践》

《自动选择正确索引访问接口(btree,hash,gin,gist,sp-gist,brin,bitmap…)的方法》

《PostgreSQL 并行写入堆表,如何保证时序线性存储 – BRIN索引优化》

《PostgreSQL 10.0 preview 功能增强 – BRIN 索引更新smooth化》

《PostgreSQL 聚集存储 与 BRIN索引 – 高并发行为、轨迹类大吞吐数据查询场景解说》

《PostgreSQL 物联网黑科技 – 瘦身几百倍的索引(BRIN index)》

《PostgreSQL 9.5 new feature – lets BRIN be used with R-Tree-like indexing strategies For “inclusion” opclasses》

《PostgreSQL 9.5 new feature – BRIN (block range index) index》

BRIN索引支持的参数pages_per_range的作用是多少个块统计一次边界值。

本文将以下面这个场景中的案例为例,讲解一下BRIN索引的pages_per_range参数的设置算法,以及BRIN索引列的优化,BRIN索引的内核优化思路等。

《万亿(100TB)级电商广告 – PostgreSQL单机如何实现毫秒级圈人》

brin扫描原理

BRIN索引的扫描原理很简单,扫描BRIN的元数据,根据元数据和用户输入的条件进行比较,过滤不符合条件的HEAP PAGE,只扫描需要扫描的HEAP PAGE。

BRIN索引列的相关性优化

点击查看全文

转载自:https://blog.csdn.net/DONGYUXIA15810857916/article/details/77648949

You may also like...