技术编程|带你认识PostgreSQL检索神器——Brin Index
Greenplum是一款强大而稳定的企业级分布式数据库 。 虽然基于 PostgreSQL , 但Greenplum针对大数据的场景和用户对性能的极致追求开发了大量的特性和做了极致甚至苛刻的优化 。 此外 , Greenplum紧密拥抱Postgres社区 , 以敏捷的方式快速升级Postgres内核 。 在Postgres 9.5的内核中 , Postgres引入了一种全新的索引类型 , 名为Brin Index , 本文将详细介绍Brin Index的内部实现以及性能表现 。 01 什么是Brin Index
Brin全称Block Range Indexes , 顾名思义即数据块范围的索引 , 它的设计初衷是为了解决当数据表极其庞大时的迅速扫描问题 。
众所周知 , Heap表以页面为单位进行组织 , 所以表的扫描也是以页面为单位 。 Brin索引的基本思想就是在索引中记录一组连续页面中字段值的大致统计信息 , 例如连续页面里某字段的最大值和最小值 , 页面扫描的时候根据Brin统计信息和查询条件直接跳过明显不符合查询条件的页面 , 从而达到快速扫描的效果 。
在实际的查询计划中 , 位图扫描基于Brin索引完成整个扫描过程 , 如下所示:gpadmin=# explain select * from t1 where c1 > 10 and c1
Bitmap Heap Scan on t1(cost=400.00..404.02 rows=1 width=64)Recheck Cond: ((c1 > 10) AND (c1
Bitmap Index Scan on t1_idx_1(cost=0.00..400.00 rows=1 width=0)Index Cond: ((c1 > 10) AND (c1 < 100))
第一部分 , Bitmap Index Scan使用Brin索引和查询条件构造位图 , 记录有效页面并过滤掉绝大多数无用的页面 , 第二部分 , Bitmap Heap Scan基于位图精准扫描有效的页面并使用查询条件对页面内元组进行二次过滤 。 实际上 , 在Brin索引出现之前 , 位图扫描通常使用Btree索引来构造位图 , 关于位图扫描的详细介绍 , 读者可以参考我们的另外一篇文章 Greenplum执行器位图——让查询更有效。 02 Heap表的Brin索引实现
了解Brin索引实现的关键在于认识Brin索引文件的布局 , Brin索引文件同样以页为单位进行存储 , 其布局如下图所示:
【技术编程|带你认识PostgreSQL检索神器——Brin Index】
本文插图
从图中可以看到 , Brin索引文件中的页面有多种类型 , 其中比较重要的是Revmap页和Regular页 , Revmap页中存放这一个叫做页面范围映射的结构(简称revmap) , 其中的每一条记录都保存了
的映射关系 。
一个页面范围单位由pages_per_range参数来决定 , 默认是128个连续页面为一个页面范围单位 , 用户在创建Brin索引的时候可以指定一个页面范围的大小 , 例如:create index idx_t1_id on t1 using brin (id) with (pages_per_range=64);
Regular Page中存放Brin索引元组,不同于Btree索引 , Brin索引元组中保存着一个页面范围单位对应的统计信息 , 例如Min/Max , 显然通过Revmap结构就能得到一个页面范围及其对应的统计信息 。
当一个页面范围内的Heap页面添加了新的tuple并且新的tuple的值打破了该页面范围原来的统计信息边界 , 我们需要更新相应的Brin索引元组 。 当一个tuple从一个Heap页面删除时 , 我们可以不更新其对应的Brin索引 , 这样会造成统计信息没有及时更新 , 但是正确性是没有问题的 , 在Vacuum的时候 , Vaccum会重新统计各个页面范围的边界,让索引信息更加的准确 。
当Bitmap Index Scan构建位图的时候 , 我们对revmap进行顺序扫描 , 如果查询条件满足一个页面范围的统计边界条件 , 那么该页面范围内的所有页面都会用于构建位图 , 否则的话该页面范围内的所有页面将会被跳过 。 03 Brin索引的性能表现
该部分我们对比一下Brin索引和Btree索引 。
推荐阅读
- 摄像头|小米截胡中兴屏下摄像头技术,小米研发还是供应链技术?
- 马斯克|马斯克用活猪演示脑机接口技术:实时读取猪脑信息 心灵感应成真了
- 三防|带你了解三防手持终端的秘密
- 第三|原创 小米发布第三代屏下相机技术,或将在Mix 4上首秀?
- 海信|首个新兴显示技术分标委成立 海信牵头制定国标
- 中年|Python编程语言有什么独特的优势呢?
- iQOO手机|超强性能带来极致游戏体验,iQOO 5带你轻松上分
- |马斯克用活猪演示脑机技术,他希望今年年底前能在人体内植入
- 互联网的放大镜|小米截胡中兴屏下摄像头技术,小米研发还是供应链技术?
- 新机发布|原创 小米发布第三代屏下相机技术,或将在Mix 4上首秀?