PostgreSQL 表上可以进行哪种索引?
索引用于加速 PostgreSQL 和一般关系数据库中的查询执行。PostgreSQL 表主要支持几种索引类型。让我们简要讨论 3 种常用的索引类型 -
哈希索引
这些索引只能处理相等比较。换句话说,如果我想检查 itemA 是否等于 itemB,那么哈希索引很有用。它不适合其他类型的操作,如 >、<、>=、<=。假设我有一个成绩表,定义如下 -
姓名 | 学号 | 百分比分数 |
---|---|---|
Aniket | 12 | 24 |
Siddhi | 45 | 65 |
Yash | 26 | 42 |
Isha | 56 | 87 |
现在,如果我可以在学号列上添加哈希索引,如下所示 -
CREATE INDEX roll_no_index ON marks USING hash (roll_no);
对于涉及学号列上相等比较的查询,将使用此索引。下面给出一个示例 -
SELECT * from marks WHERE roll_no = 12
但是,如果您有其他类型的比较,例如
SELECT * from marks where roll_no > 40
那么此索引将毫无用处,PostgreSQL 将组织查询计划,假设索引不存在。
B 树索引
这是 PostgreSQL 使用的默认索引。换句话说,如果您没有显式指定索引类型,PostgreSQL 将创建 B 树索引。PostgreSQL 对所有比较操作(>=、<=、>、<、=)都使用此索引。这使得它比哈希索引更好。它可以使用以下命令创建 -
CREATE INDEX index_name on table_name (columnName1, columnName2,…)
从上面的语法可以看出,您还可以创建多列索引。是创建单列索引还是多列索引取决于查询的 WHERE 部分中是否会经常使用一个或多个列。
Learn SQL in-depth with real-world projects through our SQL certification course. Enroll and become a certified expert to boost your career.
GiST 索引
GiST 代表广义搜索树。此索引非常频繁地与 PostgreSQL 的一个流行扩展一起使用,称为 PostGIS。PostGIS 用于对几何对象执行地理空间查询。现在,诸如包含、相交等操作无法从 B 树索引中获益(B 树索引只能处理比较和相等检查)。GiST 索引在这里非常方便。它通常应用于表的几何列,例如 -
CREATE INDEX geom_index on myGeomTable USING gist(geom)
这里有一个关于 GIS 的很好的解释 - https://postgis.net.cn/workshops/postgisintro/indexing.html
除了这些索引类型之外,还有其他索引类型:GIN、BRIN 等。您可以在此处阅读更多相关信息 - https://www.enterprisedb.com/postgres-tutorials/overview-postgresql-indexes