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 – 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