怎么使用PostgreSQL中Hash索引
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本篇内容介绍了"怎么使用PostgreSQL中Hash索引"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所
千家信息网最后更新 2025年01月20日怎么使用PostgreSQL中Hash索引
本篇内容介绍了"怎么使用PostgreSQL中Hash索引"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
逻辑结构
可以把Hash Index理解为一个Hash Table,每个Hash bucket存储根据Hash Function计算得到的对应的索引条目,为了节省空间,Hash索引条目只存储Hash Code(即Hash Value) + TID而不存储Hash Key(即索引键值),扫描索引后还必须读取相应的数据表行,因此Index Only Scan不适用于Hash Index.
testdb=# drop table if exists t_idx1;DROP TABLEtestdb=# create table t_idx1(id int,c1 varchar(20));CREATE TABLEtestdb=# create index idx_t_idx1_id on t_idx1 using hash(id);CREATE INDEXtestdb=# insert into t_idx1 select generate_series(1,100000);INSERT 0 100000testdb=# analyze t_idx1;ANALYZEtestdb=# explain verbose select * from t_idx1 where id = 1; QUERY PLAN ------------------------------------------------------------------------------------ Index Scan using idx_t_idx1_id on public.t_idx1 (cost=0.00..8.02 rows=1 width=62) Output: id, c1 Index Cond: (t_idx1.id = 1)(3 rows)testdb=# -- 不能实现Index Only Scantestdb=# explain verbose select id from t_idx1 where id = 100; QUERY PLAN ----------------------------------------------------------------------------------- Index Scan using idx_t_idx1_id on public.t_idx1 (cost=0.00..8.02 rows=1 width=4) Output: id Index Cond: (t_idx1.id = 100)(3 rows)
而普通的B-Tree索引是可以Index Only Scan的:
testdb=# create table t_idx2(id int,c1 varchar(20));CREATE TABLEtestdb=# insert into t_idx2 select generate_series(1,100000);INSERT 0 100000testdb=# create index idx_t_idx2_id on t_idx2 using btree(id);CREATE INDEXtestdb=# analyze t_idx2;ANALYZEtestdb=# explain verbose select id from t_idx2 where id = 100; QUERY PLAN ---------------------------------------------------------------------------------------- Index Only Scan using idx_t_idx2_id on public.t_idx2 (cost=0.29..8.31 rows=1 width=4) Output: id Index Cond: (t_idx2.id = 100)(3 rows)
有四种页面,分别是Meta page,Bucket Page,Overflow page和Bitmap page.
页面类型 | 说明 |
---|---|
Meta page | page number zero, which contains information on what is inside the index. |
Bucket pages | main pages of the index, which store data as «hash code - TID» pairs. |
Overflow pages | structured the same way as bucket pages and used when one page is insufficient for a bucket |
Bitmap pages | which keep track of overflow pages that are currently clear and can be reused for other buckets |
使用pageinspect插件可查看index中的相关信息
testdb=# select hash_page_type(get_raw_page('idx_t_idx1_id',0)); hash_page_type ---------------- metapage(1 row)testdb=# select hash_page_type(get_raw_page('idx_t_idx1_id',1)); hash_page_type ---------------- bucket(1 row)testdb=# \xExpanded display is on.testdb=# select * from hash_page_stats(get_raw_page('idx_t_idx1_id',1));-[ RECORD 1 ]---+-----------live_items | 189dead_items | 0page_size | 8192free_size | 4368hasho_prevblkno | 256hasho_nextblkno | 4294967295hasho_bucket | 0hasho_flag | 2hasho_page_id | 65408testdb=# select * from hash_page_stats(get_raw_page('idx_t_idx1_id',2));-[ RECORD 1 ]---+-----------live_items | 201dead_items | 0page_size | 8192free_size | 4128hasho_prevblkno | 257hasho_nextblkno | 4294967295hasho_bucket | 1hasho_flag | 2hasho_page_id | 65408
"怎么使用PostgreSQL中Hash索引"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
索引
存储
内容
更多
条目
知识
页面
实用
普通
不适
学有所成
接下来
信息
困境
实际
情况
插件
数据
数据表
文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
六安oa管理软件开发多少钱
传统服饰京绣艺术数据库建设
喆讯网络技术有限公司
软件开发及硬件采购合同
开发工作数据库
何洁视频软件开发
数据库delete删除指令
互联网科技自媒体创业防骗
数据库叙事是什么意思
警务网络安全管理是什么
绍兴市五湖网络技术
咋样才能连接组织的服务器
美国中小学生网络安全
湖南数据软件开发价格优惠
网络安全宣传句
浪潮服务器智慧计算
中石化网络安全教育报告
网络安全小组组名凸显安全
电子商务软件开发服务流程
智慧环卫软件开发费用
eclipse和数据库连接不上
专业的计算机软件开发怎么收费
玫瑰互联网金融科技公司
软件开发工作不好找吗
服务器属于什么协议
广西移动网络技术人员李晨宾
深圳商城软件开发哪里好
罗叶草互联网科技有限公司
景洪警方网络安全
自己制作软件开发