PostgreSQL索引类型

PostgreSQL索引类型PostgreSQL有很多索引类型。每种索引类型都有各自适用的情景,具体使用哪一种索引取决于数据类型、表中的底层基本数据和执行的查询类型。接下来简单看一下PostgreSQL中可用的索引类型有哪些,以及各种情况下适合使用哪个索引。1、B-treePostgreSQL中,B-tree索引是最常用的一种索引类型。用索引扫描比顺序扫描速度快,因为它可能只需要读取少部分页面,而顺序扫描可能读取几千个页面。…

大家好,又见面了,我是你们的朋友全栈君。

作者:瀚高PG实验室 (Highgo PG Lab)

PostgreSQL有很多索引类型。每种索引类型都有各自适用的情景,具体使用哪一种索引取决于数据类型、表中的底层基本数据和执行的查询类型。

接下来简单看一下PostgreSQL中可用的索引类型有哪些,以及各种情况下适合使用哪个索引。

1、B-tree

PostgreSQL中,B-tree索引是最常用的一种索引类型。

用索引扫描比顺序扫描速度快,因为它可能只需要读取少部分页面,而顺序扫描可能读取几千个页面。

默认情况下,使用CREATE INDEX语句,会创建一个B-tree索引,这对于大多数常用数据类型比如文本、数字等的适用性很强。

2、GIN

当数据类型在一列中包含多个值时适用。

这种情况下最常见的数据类型是hstore、range、jsonb等,并不是所有的数据类型都支持这种索引类型。

3、GiST

GiST索引适用的情况是:

有一些数据,它们和其他行的同一列中的值在某种程度上相互覆盖,此时适用。

最合适的数据类型是:几何类型、全文检索时的文本类型。

4、SP-GiST

空间分区GiST索引,适用于较大的数据,当数据有自然聚类元素时最适用,典型的例子是电话号码。

5、BRIN

适用于较大的数据,和SP-GiST类似。

当有非常大的数据表,而且按时间、邮政编码排好顺序时,BRIN索引允许快速的跳过或排除很多不需要的数据。

6、哈希索引

可以提供比B-tree索引更快的查询。但最大的问题是被限制在等值上所以需要寻找准确的匹配。这使得哈希索引不那么灵活。

总结

B-tree 适用于大多数数据类型和查询。

GIN 适用于json/hstore数据类型。

GiST 适用于全文检索和地理空间数据类型。

SP-GiST 适用于带有自然但不均匀聚类的较大的数据库。

BRIN 适用于顺序排列的特别大的表。

Hash 适用于等值查询操作。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136801.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JS中的prototype[通俗易懂]

    JS中的prototype[通俗易懂]JS中的phototype是JS中比较难理解的一个部分本文基于下面几个知识点:1原型法设计模式在.Net中可以使用clone()来实现原型法原型法的主要思想是,现在有1个类A,我想要创建一个类B,这

    2022年7月1日
    25
  • 全面介绍Android Studio中Git 的使用(一)

    全面介绍Android Studio中Git 的使用(一)一、Git与GitHub这里首先介绍下Git与GitHub是什么东西,他们之间有何区别呢?Git:分布式版本控制系统,最初用在Linux上,可以和SVN、CVS等作为同一个概念理解,目前世界上最先进的分布式版本控制系统(没有之一)。GitHub:基于Git的项目托管平台,简单的说就是一个网站,通过注册账号后,可以使用Git服务,它提供了可以在上面创建资源仓库的Web页面,通过shell命令或者图形用户界面可以和远程项目同步更新,对项目进行管理。还是不太清楚?就是一个项目由多个人一起干,开发中对于

    2022年7月15日
    17
  • string类型保留两位小数_js保留4位小数

    string类型保留两位小数_js保留4位小数以下我们将为大家介绍JavaScript保留两位小数的实现方法:四舍五入以下处理结果会四舍五入:varnum=2.446242342;num=num.toFixed(2);//输出结果为2.45不四舍五入以下处理结果不会四舍五入:第一种,先把小数边整数:Math.floor(15.7784514000*100)/100//输出结果为15.77第二种,当作字符串,使用正则匹…

    2022年8月10日
    5
  • 解决Oracle锁表[通俗易懂]

    解决Oracle锁表[通俗易懂]1、执行以下语句可查询被锁的表selectb.owner,b.object_name,a.session_id,a.locked_modefromv$locked_objecta,dba_objectsbwhereb.object_id=a.object_id;2、执行以下语句可查询被锁的session和serialselectb.username,b.sid,b.serial#,logon_timefromv$locked_objecta,v$session.

    2022年9月26日
    5
  • 2014 中华架构师大会 回想[通俗易懂]

    2014 中华架构师大会 回想

    2022年1月31日
    57
  • printwriter和outputstream_print和type的区别

    printwriter和outputstream_print和type的区别区别1:rintStream类和PrintWriter类 PrintStream主要操作byte流,而PrintWriter用来操作字符流。读取文本文件时一般用后者。java的一个字符(char)是16bit的,一个BYTE是8bit的 PrintStrean是写入一串8bit的数据的。 PrintWriter是写入一串16bit的数据的。 String缺省是用UNICOD

    2022年8月10日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号