PG_HGDB的博客

我们是中国基础软件先行者,其中自主产品HighgoDB依托于国际开源数据库软件PostgreSql数据库进行商业化版本的运作和研发。 同时作为中国开源软件推进联盟PostgreSQL分会的主办单位,在...

PostgreSQL中bloom的介绍(一)

Bloom 过滤器代表的是一组值。它的作用是检测一个元素是否可能属于集合,它可以允许有一些false positive,但是不允许存在false negative。也就是说,尽管某个元素不在集合中,测试也可能返回true。然而,如果元素在集合中,就不可能返回false。
创建在一组列中的Bloom索引可以被用来加速在这些列的子集上用AND相连的等式的查询。
例如:

CREATE EXTENSION bloom;
CREATE INDEX score_idx ON score USING bloom(s1,s2,s3,s4);
SELECT * FROM score WHERE s1 = 86 AND s4 = 70;

Bloom索引是通过在一个表中每行上结合一个Bloom过滤器,也被称为签名(signature),来建立的。
对于每一个有索引的列值来说,根据列数和经过哈希函数处理后的值,有一些位数组中的位会被打开。当一个查询使用索引时,和查询中提供的列对应的部分签名会被建立。然后,所有签名中包含这些位的行会被过滤出来进行检查。由于全部或者绝大部分索引被扫描,所以,只有当索引大小远比表的大小小的时候是有意义的,也就是说签名大小必须远远小于行的大小。
对于Bloom索引的大小和精度有一个取舍。选择大的索引会花更长的时间去扫描,但是选择较少的列数以供后续检测。选择小的索引会使扫描变快但是选择的用于检测的行数较多。
使用Bloom索引的优势是与利用过滤器选择性的查询位数紧密相关的。如果选择性太低,例如只有一列用于查询,或者有太少的位数被分配到索引列中,数据库可能会选择回归到扫描整个表。
这个效果对于不同类型的硬盘(例如SSD和机械硬盘)来说差别很大。使用bloom索引的优势在SSD上被增强了,随机访问惩罚在SSD上会降低。

By Kalath

阅读更多

扫码向博主提问

去开通我的Chat快问

pg_hgdb

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • POSTGRESQL
  • HIGHGO
版权声明:本文为博主原创之文章,未经博主允许谢绝转载。 https://blog.csdn.net/pg_hgdb/article/details/80321921
个人分类: PostgreSQL Highgo DB
想对作者说点什么? 我来说一句

Neo4j简介

残阳似血的博客

bluetropic bluetropic

2014-11-01 14:30:26

阅读数:1077

没有更多推荐了,返回首页

不良信息举报

PostgreSQL中bloom的介绍(一)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭