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

怎么使用PostgreSQL中Hash索引

2024-04-02 19:04:59 833人浏览 泡泡鱼
摘要

本篇内容介绍了“怎么使用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 TABLE
testdb=# create table t_idx1(id int,c1 varchar(20));
CREATE TABLE
testdb=# create index idx_t_idx1_id on t_idx1 using hash(id);
CREATE INDEX
testdb=# insert into t_idx1 select generate_series(1,100000);
INSERT 0 100000
testdb=# analyze t_idx1;
ANALYZE
testdb=# 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 Scan
testdb=# 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 TABLE
testdb=# insert into t_idx2 select generate_series(1,100000);
INSERT 0 100000
testdb=# create index idx_t_idx2_id on t_idx2 using btree(id);
CREATE INDEX
testdb=# analyze t_idx2;
ANALYZE
testdb=# 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 pagepage number zero, which contains infORMation on what is inside the index.
Bucket pagesmain pages of the index, which store data as «hash code — TID» pairs.
Overflow pagesstructured the same way as bucket pages and used when one page is insufficient for a bucket
Bitmap pageswhich 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=# \x
Expanded display is on.
testdb=# select * from hash_page_stats(get_raw_page('idx_t_idx1_id',1));
-[ RECORD 1 ]---+-----------
live_items      | 189
dead_items      | 0
page_size       | 8192
free_size       | 4368
hasho_prevblkno | 256
hasho_nextblkno | 4294967295
hasho_bucket    | 0
hasho_flag      | 2
hasho_page_id   | 65408
testdb=# select * from hash_page_stats(get_raw_page('idx_t_idx1_id',2));
-[ RECORD 1 ]---+-----------
live_items      | 201
dead_items      | 0
page_size       | 8192
free_size       | 4128
hasho_prevblkno | 257
hasho_nextblkno | 4294967295
hasho_bucket    | 1
hasho_flag      | 2
hasho_page_id   | 65408

“怎么使用Postgresql中Hash索引”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

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

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

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

猜你喜欢
  • 怎么使用PostgreSQL中Hash索引
    本篇内容介绍了“怎么使用PostgreSQL中Hash索引”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!逻...
    99+
    2024-04-02
  • 怎么使用PostgreSQL中的Bloom索引
    这篇文章主要讲解了“怎么使用PostgreSQL中的Bloom索引”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用PostgreSQL中的Bloom索...
    99+
    2024-04-02
  • MySQL中怎么设置Hash索引
    这篇文章主要讲解了“MySQL中怎么设置Hash索引”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中怎么设置Hash索引”吧!除了B-Tree 索引,MySQL还提供了如下索引:H...
    99+
    2023-06-25
  • MongoDB中使用hash索引有什么限制
    在MongoDB中,使用hash索引有以下限制: Hash索引仅适用于精确匹配查询,不支持范围查询或排序操作。 在对大型数据集进行...
    99+
    2024-04-19
    MongoDB
  • mongodb怎么建立hash索引
    在MongoDB中,可以通过使用`createIndex()`方法来建立一个哈希索引。首先,连接到MongoDB数据库。然后,选择要...
    99+
    2023-09-06
    mongodb
  • 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
  • MongoDB中hash索引的使用场景有哪些
    存储密码:在用户认证系统中,通常会将用户的密码存储为哈希值,以增加安全性。使用哈希索引可以加快对密码的查找速度。 数据去重:...
    99+
    2024-04-19
    MongoDB
  • mysql中B+Tree索引和Hash索引有什么区别
    这篇文章主要为大家展示了“mysql中B+Tree索引和Hash索引有什么区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中B+Tree索引和Hash索引有什么区别”这篇文章吧。1、...
    99+
    2023-06-15
  • MySQL中的B-Tree引索与Hash引索有区别吗
    MySQL中的B-Tree引索与Hash引索有区别吗?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。MySQL中B-Tree引索...
    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
  • MySQL中怎么使用索引
    今天就跟大家聊聊有关MySQL中怎么使用索引,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  MySQL何时使用索引  对一个键码使用>,&g...
    99+
    2024-04-02
  • sql中索引怎么使用
    数据库索引通过创建数据副本,优化特定列的检索速度,类似于字典中按字母顺序排列的单词。常见的索引类型包括 b-tree 索引、hash 索引和 bitmap 索引,它们分别适用于范围查询、...
    99+
    2024-05-07
    排列
  • 怎么在Mysql中使用索引
    本篇文章为大家展示了怎么在Mysql中使用索引,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。为何要有索引一般的应用系统,读写比例在10:1左右,而且插入操作和一般的...
    99+
    2024-04-02
  • C#中索引器怎么使用
    这篇文章给大家分享的是有关C#中索引器怎么使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述索引器(Indexer) 允许一个对象可以像数组一样使用下标的方式来访问。当您为类定义一个索引器时,该类的行为就会像...
    99+
    2023-06-15
  • python中的索引怎么使用
    在Python中,可以使用索引来访问和操作列表、字符串和元组等序列类型的对象。索引是一个非负整数,表示序列中的位置。索引从0开始,表...
    99+
    2023-08-18
    python
  • PostgreSQL中如何创建索引
    在 PostgreSQL 中,可以使用以下语法来创建索引: 1、创建一个基本索引: CREATE INDEX index_name ...
    99+
    2024-04-02
  • 如何在PostgreSQL数据库中创建和使用索引
    在PostgreSQL数据库中,可以通过以下步骤来创建和使用索引: 创建索引: 使用CREATE INDEX语句可以在表上创建索引...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作