【原创】PostgreSQL 位图索引

【原创】PostgreSQL 位图索引,第1张

概述什么是位图索引?    位图索引就是用一个位图表格来存放记录是否可见的结构。 位图索引的一些特性?    位图索引实现方法: 用一个BIT位来表示这个属性对应的值是否存在,存在为1,不存在为0.    位图索引作用范围:处理状态值,也可以说可选择度很高的情形。 位图索引的优缺点?    位图索引优势: A, 可以很大的压缩比率节省空间;B,非常快速的定位到检索值可见与否。    位图索引缺陷: A

什么是位图索引?

位图索引就是用一个位图表格来存放记录是否可见的结构。

位图索引的一些特性?

位图索引实现方法: 用一个BIT位来表示这个属性对应的值是否存在,存在为1,不存在为0.

位图索引作用范围:处理状态值,也可以说可选择度很高的情形。

位图索引的优缺点?

位图索引优势: A, 可以很大的压缩比率节省空间;B,非常快速的定位到检索值可见与否。

位图索引缺陷: A, 位图本身无序存储,每次检索对磁盘都是一次随机IO;B,因为压缩存储,适合olAP应用。 当然也可以不用压缩,比如INFOBRIGHT就提供这样的功能。


Postgresql不支持位图索引,所以也就不支持位图信息的压缩存储。 不过在创建查询计划的时候,会为普通的索引(BTREE,HASH)等建立位图表,即为Bitmap Heap table.

其中

Bitmap Index Scan 用来在内存中创建一个位图表,每一个BIT表示一个与过滤条件有关的页面。 此页面有可能有数据为1,不可能为0.

Bitmap Heap Scan. 在内存中创建好的位图表指针对应的页面进行顺序扫描,排除不符合的记录。


来看下位图扫描的例子。

表bitmap_test 字段is_visible 可选择性很高,只有两个值,

对于查询语句select is_visible from bitmap_test where is_visible = 'yes'来说,对应的查询计划:

                                                               query PLAN                                             -------------------------------------------------------------------------------------------------------------------------------------------- Bitmap Heap Scan on bitmap_test  (cost=2023.16..4157.75 rows=99967 wIDth=4) (actual time=24.373..41.054 rows=100000 loops=1)   Recheck Cond: (is_visible = 'yes'::bpchar)   ->  Bitmap Index Scan on IDx_bitmap_is_visible  (cost=0.00..1998.17 rows=99967 wIDth=0) (actual time=24.252..24.252 rows=100000 loops=1)         Index Cond: (is_visible = 'yes'::bpchar) Total runtime: 47.175 ms(5 rows)Time: 47.725 ms



从上面这个查询EXPLAIN结果来看, 先是创建一个位图表,完了往上推到页面,在页面里重新检查每行记录的值满足过滤条件。 所有完结后,打印结果。

总结

以上是内存溢出为你收集整理的【原创】PostgreSQL 位图索引全部内容,希望文章能够帮你解决【原创】PostgreSQL 位图索引所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1177142.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存