返回顶部
首页 > 资讯 > 数据库 >怎么使用PostgreSQL中的Bloom索引
  • 862
分享到

怎么使用PostgreSQL中的Bloom索引

2024-04-02 19:04:59 862人浏览 薄情痞子
摘要

这篇文章主要讲解了“怎么使用postgresql中的Bloom索引”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Postgresql中的Bloom索

这篇文章主要讲解了“怎么使用postgresql中的Bloom索引”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Postgresql中的Bloom索引”吧!

简介
Bloom Index源于Bloom filter(布隆过滤器),布隆过滤器用于在使用少量的空间的情况下可以很快速的判定某个值是否在集合中,其缺点是存在假阳性False Positives,因此需要Recheck来判断该值是否在集合中,但布隆过滤器不存在假阴性,也就是说,对于某个值如果过滤器返回不存在,那就是不存在.

结构
其结构如下图所示:

怎么使用PostgreSQL中的Bloom索引

第一个page为metadata,然后每一行都会有一个bit array(signature)和TID与其对应.

示例
创建数据表,插入数据

testdb=# drop table if exists t_bloom;
DROP TABLE
testdb=# CREATE TABLE t_bloom (id int, dept int, id2 int, id3 int, id4 int, id5 int,id6 int,id7 int,details text, zipcode int);
CREATE TABLE
testdb=# 
testdb=# INSERT INTO t_bloom 
testdb-# SELECT (random() * 1000000)::int, (random() * 1000000)::int,
testdb-# (random() * 1000000)::int,(random() * 1000000)::int,(random() * 1000000)::int,(random() * 1000000)::int, 
testdb-# (random() * 1000000)::int,(random() * 1000000)::int,md5(g::text), floor(random()* (20000-9999 + 1) + 9999) 
testdb-# from generate_series(1,16*1024*1024) g;
INSERT 0 16777216
testdb=# 
testdb=# analyze t_bloom;
ANALYZE
testdb=# 
testdb=# select pg_size_pretty(pg_table_size('t_bloom'));
 pg_size_pretty 
----------------
 1619 MB
(1 row)

创建Btree索引

testdb=# 
testdb=# create index idx_t_bloom_btree on t_bloom using btree(id,dept,id2,id3,id4,id5,id6,id7,zipcode);
CREATE INDEX
testdb=# \di+ idx_t_bloom_btree
                              List of relations
 Schema |       Name        | Type  | Owner |  Table  |  Size  | Description 
--------+-------------------+-------+-------+---------+--------+-------------
 public | idx_t_bloom_btree | index | pg12  | t_bloom | 940 MB | 
(1 row)

执行查询

testdb=# EXPLAIN ANALYZE select * from t_bloom where id4 = 305294 and zipcode = 13266;
                                                              QUERY PLAN                                                     
---------------------------------------------------------------------------------------------------------
 Index Scan using idx_t_bloom_btree on t_bloom  (cost=0.56..648832.73 rows=1 width=69) (actual time=2648.215..2648.215 rows=0
 loops=1)
   Index Cond: ((id4 = 305294) AND (zipcode = 13266))
 Planning Time: 3.244 ms
 Execution Time: 2659.804 ms
(4 rows)
testdb=# EXPLAIN ANALYZE select * from t_bloom where id5 = 241326 and id6 = 354198;
                                                              QUERY PLAN                                                     
---------------------------------------------------------------------------------------------------------
 Index Scan using idx_t_bloom_btree on t_bloom  (cost=0.56..648832.73 rows=1 width=69) (actual time=2365.533..2365.533 rows=0
 loops=1)
   Index Cond: ((id5 = 241326) AND (id6 = 354198))
 Planning Time: 1.918 ms
 Execution Time: 2365.629 ms
(4 rows)

创建Bloom索引

testdb=# create extension bloom;
CREATE EXTENSION
testdb=# CREATE INDEX idx_t_bloom_bloom ON t_bloom USING bloom(id, dept, id2, id3, id4, id5, id6, id7, zipcode) 
testdb-# WITH (length=64, col1=4, col2=4, col3=4, col4=4, col5=4, col6=4, col7=4, col8=4, col9=4);
CREATE INDEX
testdb=# \di+ idx_t_bloom_bloom
                              List of relations
 Schema |       Name        | Type  | Owner |  Table  |  Size  | Description 
--------+-------------------+-------+-------+---------+--------+-------------
 public | idx_t_bloom_bloom | index | pg12  | t_bloom | 225 MB | 
(1 row)

执行查询

testdb=# EXPLAIN ANALYZE select * from t_bloom where id4 = 305294 and zipcode = 13266;
                                                              QUERY PLAN                                                     
-------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on t_bloom  (cost=283084.16..283088.18 rows=1 width=69) (actual time=998.727..998.727 rows=0 loops=1)
   Recheck Cond: ((id4 = 305294) AND (zipcode = 13266))
   Rows Removed by Index Recheck: 12597
   Heap Blocks: exact=12235
   ->  Bitmap Index Scan on idx_t_bloom_bloom  (cost=0.00..283084.16 rows=1 width=0) (actual time=234.893..234.893 rows=12597
 loops=1)
         Index Cond: ((id4 = 305294) AND (zipcode = 13266))
 Planning Time: 31.482 ms
 Execution Time: 998.975 ms
(8 rows)
testdb=# EXPLAIN ANALYZE select * from t_bloom where id5 = 241326 and id6 = 354198;
                                                              QUERY PLAN                                                     
-------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on t_bloom  (cost=283084.16..283088.18 rows=1 width=69) (actual time=1019.621..1019.621 rows=0 loops=1)
   Recheck Cond: ((id5 = 241326) AND (id6 = 354198))
   Rows Removed by Index Recheck: 13033
   Heap Blocks: exact=12633
   ->  Bitmap Index Scan on idx_t_bloom_bloom  (cost=0.00..283084.16 rows=1 width=0) (actual time=204.873..204.873 rows=13033
 loops=1)
         Index Cond: ((id5 = 241326) AND (id6 = 354198))
 Planning Time: 0.441 ms
 Execution Time: 1019.811 ms
(8 rows)

从执行结果来看,在查询条件中没有非前导列(上例中为id1)的情况下多列任意组合查询,bloom index会优于btree index.

感谢各位的阅读,以上就是“怎么使用PostgreSQL中的Bloom索引”的内容了,经过本文的学习后,相信大家对怎么使用PostgreSQL中的Bloom索引这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么使用PostgreSQL中的Bloom索引

本文链接: https://lsjlt.com/news/63797.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用PostgreSQL中的Bloom索引
    这篇文章主要讲解了“怎么使用PostgreSQL中的Bloom索引”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用PostgreSQL中的Bloom索...
    99+
    2024-04-02
  • 怎么使用PostgreSQL中Hash索引
    本篇内容介绍了“怎么使用PostgreSQL中Hash索引”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!逻...
    99+
    2024-04-02
  • PostgreSQL中怎么创建索引
    在 PostgreSQL 中,可以使用 CREATE INDEX 语句来创建索引。语法如下: CREATE INDEX index_...
    99+
    2024-04-09
    PostgreSQL
  • postgresql 索引使用参考
    通常在postgresql创建普通索引如下create index idx_table_name_x1 on table_name(col_name);reate index 执行后在创建索引期间会阻塞 d...
    99+
    2024-04-02
  • 怎么在postgresql中创建索引
    在postgresql中创建索引的方法:1.启动postgresql服务;2.登录postgresql数据库;3.使用数据库;4.在数据库新建表;5.使用CREATE INDEX命令创建索引;具体步骤如下:首先,在命令行中启动postgre...
    99+
    2024-04-02
  • PostgreSQL中的GIN索引有什么作用
    本篇内容主要讲解“PostgreSQL中的GIN索引有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL中的GIN索引有什么作用”吧!G...
    99+
    2024-04-02
  • PostgreSQL中的Btree索引有什么作用
    本篇内容主要讲解“PostgreSQL中的Btree索引有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL中的Btree索引有什么作用...
    99+
    2024-04-02
  • python中的索引怎么使用
    在Python中,可以使用索引来访问和操作列表、字符串和元组等序列类型的对象。索引是一个非负整数,表示序列中的位置。索引从0开始,表...
    99+
    2023-08-18
    python
  • MySQL中怎么使用索引
    今天就跟大家聊聊有关MySQL中怎么使用索引,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  MySQL何时使用索引  对一个键码使用>,&g...
    99+
    2024-04-02
  • sql中索引怎么使用
    数据库索引通过创建数据副本,优化特定列的检索速度,类似于字典中按字母顺序排列的单词。常见的索引类型包括 b-tree 索引、hash 索引和 bitmap 索引,它们分别适用于范围查询、...
    99+
    2024-05-07
    排列
  • SQL Server中的索引怎么使用
    在SQL Server中,索引可以提高查询性能,加快数据的检索速度。下面是一些使用索引的常见方法:1. 创建索引:在需要加速查询的列...
    99+
    2023-08-18
    SQL Server
  • SQL Server中的索引怎么使用
    本篇内容主要讲解“SQL Server中的索引怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server中的索引怎么使用”吧!一、索引的介绍什么是索引?索引是...
    99+
    2023-06-30
  • 怎么在Mysql中使用索引
    本篇文章为大家展示了怎么在Mysql中使用索引,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。为何要有索引一般的应用系统,读写比例在10:1左右,而且插入操作和一般的...
    99+
    2024-04-02
  • C#中索引器怎么使用
    这篇文章给大家分享的是有关C#中索引器怎么使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述索引器(Indexer) 允许一个对象可以像数组一样使用下标的方式来访问。当您为类定义一个索引器时,该类的行为就会像...
    99+
    2023-06-15
  • Oracle与PostgreSQL的NULL和索引使用区别是什么
    这篇文章主要讲解了“Oracle与PostgreSQL的NULL和索引使用区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle与Postgr...
    99+
    2024-04-02
  • PostgreSQL索引分类及使用的示例分析
    这篇文章给大家分享的是有关PostgreSQL索引分类及使用的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.索引方式PostgreSQL数据库支持单列index,多列...
    99+
    2024-04-02
  • Hive中的索引类型怎么使用
    在Hive中,可以使用CREATE INDEX语句来创建索引。Hive支持两种类型的索引:NORMAL和BITMAP。 创建NOR...
    99+
    2024-04-02
  • 如何在PostgreSQL数据库中创建和使用索引
    在PostgreSQL数据库中,可以通过以下步骤来创建和使用索引: 创建索引: 使用CREATE INDEX语句可以在表上创建索引...
    99+
    2024-04-02
  • MongoDB中怎么使用唯一索引
    这篇文章将为大家详细讲解有关MongoDB中怎么使用唯一索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 唯一索引的主要目的是...
    99+
    2024-04-02
  • MySQL中怎么使用索引优化
    本篇内容主要讲解“MySQL中怎么使用索引优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中怎么使用索引优化”吧!使用索引优化索引是数据库优化最常用也是最重要的手段之一,通过索引通常...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作