You need to enable JavaScript to run this app.
文档中心
云数据库 PostgreSQL 版

云数据库 PostgreSQL 版

复制全文
下载 pdf
插件
内存虚拟索引(hypopg)
复制全文
下载 pdf
内存虚拟索引(hypopg)
hypopg 是一款 PostgreSQL 插件,它支持在内存中创建虚拟索引(Hypothetical Indexes)。这种索引完全存在于内存中,不会写入磁盘,因此不占用物理存储空间,也不产生实际的 I/O 开销。​
其核心价值在于,允许数据库管理员(DBA)和开发者在不修改生产环境数据结构、不影响线上服务性能的前提下,安全、低成本地评估新索引对特定查询的潜在优化效果。通过 EXPLAIN 分析查询计划,可以判断优化器是否会选择使用这个虚拟索引,从而为是否创建真实索引提供决策依据。​
注意事项​
  • 适用范围:虚拟索引仅在 EXPLAIN 分析查询计划时对优化器可见,而 EXPLAIN ANALYZE 和实际的查询执行过程并不会使用它们。​
  • 会话隔离:虚拟索引仅对创建它的当前数据库会话有效,其他并发会话无法感知或使用。​
  • 生命周期:虚拟索引的创建不产生 WAL(预写日志)记录,因此当数据库服务重启或会话结束后,所有创建的虚拟索引都将自动丢失。​
  • 支持类型:仅支持创建 B-tree、BRIN、HASH 以及 BLOOM 四种类型的虚拟索引(使用 BLOOM 索引需已安装 bloom 插件)。​
创建与删除插件​
创建插件​
执行以下 SQL 命令来创建 hypopg 插件,并通过查询 pg_extension 视图来验证安装是否成功。​
​
--创建​
create extension hypopg;​
--查看是否创建成功​
SELECT * FROM pg_extension WHERE extname = 'hypopg';​
​
删除插件​
如果不再需要,可以执行以下命令来卸载插件。​
​
drop extension hypopg;​
​
基础使用​
功能启用与配置​
在使用虚拟索引功能前,需要通过 GUC 参数进行启用和配置。​
​
-- 功能启用​
-- off:虚拟索引不会被使用,现存不会删​
SET hypopg.enabled = on;​
-- 使用真实OID​
-- off:使用预留的 OID 范围(约 2500 个)​
-- on:使用真实 OID,不限数量​
SET hypopg.use_real_oids = off;​
​
主要函数与视图​
以下表格汇总了 hypopg 插件提供的核心函数和视图及其用法。​
​
对象​
功能​
用法​
hypopg_hidden_indexes​
​
记录所有隐藏索引​
​
​
SELECT * FROM hypopg_hidden_indexes;​
​
hypopg_list_indexes​
​
记录所有虚拟索引​
​
​
SELECT * FROM hypopg_list_indexes;​
​
hypopg​
获取虚拟索引详细信息​
​
SELECT * FROM hypopg();​
​
hypopg_create_index ​
创建虚拟索引​
​
SELECT * FROM hypopg_create_index('CREATE INDEX ON test_table (id, value)');​
​
hypopg_drop_index​
删除虚拟索引​
​
--hypopg_list_indexes第一列记录indexrelid​
SELECT hypopg_drop_index(indexrelid);​
​
hypopg_get_indexdef​
获取定义​
​
SELECT hypopg_get_indexdef(indexrelid);​
​
​
hhypopg_hidden_indexes​
​
查询和记录所有隐藏索引​
​
SELECT * FROM hypopg_hidden_indexes();​
​
hypopg_hide_index​
隐藏现存索引,虚拟和正式索引皆可​
​
SELECT hypopg_hide_index('index_name'::regclass);​
​
hypopg_relation_size​
虚拟索引大小​
​
SELECT pg_size_pretty(hypopg_relation_size(indexrelid));​
​
hypopg_reset​
清空所有虚拟索引​
​
​
SELECT hypopg_reset();​
​
hypopg_reset_index​
清空所有虚拟索引​
​
​
SELECT hypopg_reset_index();​
​
hypopg_unhide_all_indexes​
取消隐藏所有索引​
​
SELECT hypopg_unhide_all_indexes();​
​
hypopg_unhide_index​
取消隐藏单个索引​
​
SELECT hypopg_unhide_index(index_oid);​
​
​
​
​
最近更新时间:2026.03.31 10:39:12
这个页面对您有帮助吗?
有用
有用
无用
无用