加载中...

BRIN(Block Range Index,块范围索引)是 PostgreSQL 9.5 引入的一种轻量级索引:它不为每行建条目,而是把表按物理顺序切成若干块范围(默认 128 个页为一段),只存储每段的摘要信息,如该段内某列的最小值与最大值。
查询时,BRIN 根据摘要判断每个块范围是否可能包含目标值:范围条件与该段 [min, max] 不相交则整段跳过,相交则读取该段所有页逐行复核。因此它是一种"有损"索引,靠批量排除换取极致的空间效率——TB 级大表的 BRIN 索引可能只有几 MB。
BRIN 的效果强依赖数据的物理相关性:列值必须与存储顺序高度相关,典型如按时间顺序追加的日志表、流水表的时间戳列。数据乱序则每段 min/max 范围都很宽,索引几乎失效。
相比 B 树,BRIN 体积小数百倍、维护开销极低,但只适合范围扫描、不支持精确定位,两者定位互补。

登录 后参与讨论
暂无讨论,来发表第一条评论吧