GIN 索引代替 bitmap 索引

简介: 使用GIN代替bitmap索引, 减少索引空间开销

在一些数据库系统中, bitmap 索引经常用来给一些具有大量重复值的字段建立索引。 布尔字段(性别)、状态编码等。
相比于使用正常的 B-Tree 索引, Bitmap 显示的非常高效。

PostgreSQL 并不支持bitmap索引, 但是使用GIN索引可以非常好的处理这种冗余度高的字段。GIN 索引的内部结构与bitmap
是非常相似的。它并不是使用bitmap作为索引项,但是在9.4版本中,它使用的是 varbyte 编码,在最好的情况下, 每一个索引
项只需要占用一个字节。之前是使用 2-3个字节用来存放索引项。在早期的版本,是使用6个字节来存放索引条目,但是这相比于
B-Tree 每个索引条目仍然具有非常小的开销。

创建一个表, 并使用一些字段用来填充它。


CREATE TABLE numbers (n int4, mod2 int4);

insert into numbers (n, mod2) select n, n%2 from generate_series(1, 10000000) n;

这里用到了扩展件 btree_gin, 下面为表创建 GIN 索引


create extension btree_gin;

create index numbers_mod2_gin_idx on numbers using gin(mod2);

对比实验, 我们为相同的列创建B-Tree 索引


create index numbers_mod2_btree_idx on numbers using btree (mod2);

检查建立的索引

di+

public | numbers_mod2_btree_idx | index | whatcat | numbers | 214 MB |
public | numbers_mod2_gin_idx | index | whatcat | numbers | 10 MB |


在这里我们可以看到, GIN 索引相比于 B-Tree 索引有20倍小。
目录
相关文章
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
255402 0
|
12月前
|
监控 Kubernetes Python
Python 应用可观测重磅上线:解决 LLM 应用落地的“最后一公里”问题
为增强对 Python 应用,特别是 Python LLM 应用的可观测性,阿里云推出了 Python 探针,旨在解决 LLM 应用落地难、难落地等问题。助力企业落地 LLM。本文将从阿里云 Python 探针的接入步骤、产品能力、兼容性等方面展开介绍。并提供一个简单的 LLM 应用例子,方便测试。
408 130
|
11月前
|
JavaScript 前端开发 开发者
call、bind、apply区别
【10月更文挑战第26天】`call`、`bind` 和 `apply` 方法在改变函数 `this` 指向和参数传递方面各有特点,开发者可以根据具体的需求和使用场景选择合适的方法来实现更灵活和高效的JavaScript编程。
186 1
|
12月前
|
数据采集 存储 监控
组建数据治理团队:从无到有的实践指南
通过以上四个步骤,可以从无到有地建立和完善一个高效的数据治理团队。这个团队将帮助企业更好地管理和利用自己的数据资产,从而为企业创造更大的价值。
|
SQL NoSQL Java
SQL查询引擎原理浅析
# SQL的诞生 SQL英文全称是Structured Query Language,中文名即结构化查询语言,是一门专门用来查询数据的声明式编程语言。 我先解释一下声明式语言的概念,编程语言有两个分类: * 命令式:手把手教机器做事情 * 声明式:告诉机器任务,让它自己想办法解决 举个例子,假设你家里有机器人,你想让它帮忙拿一个在客厅桌子上的白色杯子给你。 如果用命令式编程的方
783 0
SQL查询引擎原理浅析
|
存储 缓存 监控
Linux内存管理:理解正常波动背后的机制
Linux内存管理:理解正常波动背后的机制
363 0
|
存储 缓存 监控
探秘Linux系统内存问题:主体 进程RSS均正常但系统内存下降的调查方法
探秘Linux系统内存问题:主体 进程RSS均正常但系统内存下降的调查方法
318 0
|
关系型数据库 MySQL 数据库
|
机器学习/深度学习 人工智能 数据可视化
ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程(1)
ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程
448 0
|
Web App开发 弹性计算 Kubernetes
云原生系列 【基于CCE Kubernetes编排实战】
## 基于CCE Kubernetes编排实战 #### 本实验用于指导学员基于CCE完成Kubernetes实验操作。主要包含Kubernetes控制器Deployment、DaemonSet编排操作。 操作前提:预置环境与登录华为云收起 ①预置环境 实验开始之前,为什么需要先预置实验环境? 注意:开始实验之前请点击手册上方"预置实验环境"按钮。 预置实验环境约等待【1分钟】后预置成功。环境预置成功会生成以分配的华为云账号命名的Vpc、安全组。 (2)登录华为云进入【实验操作桌面】,打开Chrome浏览器,首次可自动登录并进入华为云 控制台页面。 如后续关闭浏览器重新登陆或自动
443 1