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

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

hash

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

nameroll_noperc_marks
阿尼凯特1224
西迪4565
亚什2642
伊莎5687

现在,如果我可以在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