索引用于加快PostgreSQL和一般任何关系数据库中的查询执行。PostgreSQL表主要支持几种索引类型。让我们简要讨论3种常见的用户索引类型-
这些索引只能处理相等性比较。换句话说,如果我要检查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将假设该索引不存在来组织查询计划。
这是PostgreSQL使用的默认索引。换句话说,如果您未明确指定索引类型,则PostgreSQL将创建一个Btree索引。PostgreSQL使用该索引进行所有比较操作(> =,<=,>,<,=)。这使其比哈希索引更好。可以使用以下命令创建它-
CREATE INDEX index_name on table_name (columnName1, columnName2,…)
从上面的语法可以看到,您还可以创建多列索引。创建单列索引还是多列索引取决于对表进行查询的WHERE部分中会频繁使用一列还是多列。
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