当前位置: 首页 > 编程笔记 >

可以在PostgreSQL表上执行哪种索引?

谷梁驰
2023-03-14
本文向大家介绍可以在PostgreSQL表上执行哪种索引?,包括了可以在PostgreSQL表上执行哪种索引?的使用技巧和注意事项,需要的朋友参考一下

索引用于加快PostgreSQL和一般任何关系数据库中的查询执行。PostgreSQL表主要支持几种索引类型。让我们简要讨论3种常见的用户索引类型-

hash

这些索引只能处理相等性比较。换句话说,如果我要检查itemA = itemB,则哈希索引很有用。它不适用于其他类型的操作,例如>,<。> =,<=。假设我有一个标记表,定义如下-

name roll_no perc_marks
阿尼凯特 12 24
西迪 45 65
亚什 26 42
伊莎 56 87

现在,如果我可以在roll_no列上添加哈希索引,如下所示:

CREATE INDEX roll_no_index ON marks USING hash (roll_no);

对于涉及roll_no列上等于比较的查询,将使用此索引。下面给出一个例子-

SELECT * from marks WHERE roll_no = 12

但是,如果您有其他类型的比较,例如

SELECT * from marks where roll_no > 40

则该索引将无用,并且PostgreSQL将假设该索引不存在来组织查询计划。

B-tree

这是PostgreSQL使用的默认索引。换句话说,如果您未明确指定索引类型,则PostgreSQL将创建一个Btree索引。PostgreSQL使用该索引进行所有比较操作(> =,<=,>,<,=)。这使其比哈希索引更好。可以使用以下命令创建它-

CREATE INDEX index_name on table_name (columnName1, columnName2,…)

从上面的语法可以看到,您还可以创建多列索引。创建单列索引还是多列索引取决于对表进行查询的WHERE部分中会频繁使用一列还是多列。

GiST

GiST代表广义搜索树。PostgreSQL的流行扩展(称为PostGIS)经常使用此索引。PostGIS用于对几何对象执行地理空间查询。现在,包含,相交等操作无法从B树索引(只能处理比较和相等性检查)中受益。GiST索引在这里非常方便。通常应用于表的几何列,例如-

CREATE INDEX geom_index on myGeomTable USING gist(geom)

这里给出了GIS的一个很好的解释-https://postgis.net/workshops/postgisintro/indexing.html

除了这些索引类型外,还有其他索引类型:GIN,BRIN等。您可以在此处了解更多有关它们的信息-https://www.enterprisedb.com/postgres-tutorials/overview-postgresql-indexes

 类似资料:
  • 在使用正式docker映像时,我正在努力在Oracle XE 18.4中创建用户。 此答案建议运行命令,但当我以用户身份连接时,我没有运行此命令的权限: 会将其列为有效选项。我无法以或身份登录(ORA-01017:无效用户名/密码;登录被拒绝)。 我试图重置密码使用,但没有帮助。 运行需要做什么?

  • GHC有很多可以执行的优化,但我不知道它们都是什么,也不知道它们在什么情况下执行的可能性有多大。 我的问题是:我可以期望它每次应用什么转换,或者几乎如此?如果我看一段经常执行(评估)的代码,我的第一个想法是“嗯,也许我应该优化它”,在这种情况下,我的第二个想法应该是“不要想它,GHC得到了这个”? 我在读《流融合:从列表到流再到什么都没有》这篇论文,他们使用的将列表处理改写成另一种形式的技术,GH

  • 我在实践中读到了一致性。现在我想了解如何处理InterruptedException 来自书籍的建议: -传播异常(可能在特定于任务的清理之后),使您的方法也成为可中断的阻塞方法;或者,恢复中断状态,以便调用堆栈中更高级别的代码可以处理它 -只有实现线程中断策略的代码才能吞咽中断请求。通用任务和库代码绝不应吞没中断请求。 前两种说法我很清楚,但第三种我不明白。你能澄清一下吗?最好提供示例。 吞下中

  • 我正在eclipse中使用模拟器。我在模拟器中提取了大约2200条文本消息/data/data/com.android.providers.telephony/databases/mmssms。从emulator中读取db,并在其中看到文本消息 SQLiteDatabase smsDB=SQLiteDatabase.openDatabase("/data/data/com.android.prov

  • 问题内容: 我想使用Postgres 9.4 在json列上创建一个索引,该索引将在搜索列中的特定键时使用。 例如,我有一个带有json列“ animals”的“农场”表。 animals列具有通用格式的json对象: 我已经尝试了多个索引(分别): 我想运行如下查询: 并让该查询使用索引。 当我运行此查询时: 那么(1)索引就可以了,但是我无法获得任何索引来解决不平等问题。 这样的索引可能吗?

  • 这是我想做的代码,但什么也没有做。我甚至试过这个 但我找不到任何解决办法...有人能帮我吗?