PostgreSQL 索引

17 Mar 2025 | 5 分钟阅读

在本节中,我们将更有效地理解 PostgreSQL 索引 的工作原理,为什么我们需要使用索引、PostgreSQL 索引的特性、不同类型的索引, 以及在 PostgreSQL 索引部分下执行的各种命令。

什么是 PostgreSQL 索引?

PostgreSQL 中,索引是用于增强从数据库中检索数据的特殊工具。

数据库索引 与书的索引类似。 索引为所有值创建一个访问,这些值显示在被索引的列上。

索引倾向于帮助数据库服务器更快地识别定义的行,而不是没有索引时所能做到的。 我们必须正确地使用 索引 才能获得显著的结果。

PostgreSQL 索引的特性

PostgreSQL 索引的一些基本特征如下:

  • 索引用于增强带有 SELECTWHERE 的数据输出
  • 如果我们使用 INSERTUPDATE 命令,它会减慢数据输入的速度。
  • 在不影响任何数据的情况下,我们可以 创建删除 索引
  • 我们可以通过定义创建索引的 索引名称表或列名称,在 CREATE INDEX 命令的帮助下生成索引。
  • 我们还可以创建一个 唯一索引,它类似于 UNIQUE 约束。

在 PostgreSQL 索引下执行的命令

在 PostgreSQL 索引中,我们可以执行以下命令

让我们逐一了解它们

命令描述
创建索引它用于通过定义创建索引的 索引名称表或列名称 来创建一个新索引。
删除索引Drop index 命令用于删除当前索引。
列出索引它用于表示如何在 PostgreSQL 数据库中列出所有索引。
唯一索引Unique index 命令允许我们逐步指定唯一索引。
表达式上的索引它用于指定基于表达式的索引。
部分索引部分索引 用于显示部分索引的使用。
重新索引要重建一个或多个索引,我们可以使用 REINDEX 命令。
多列索引它用于显示多列索引的用法,以增强 WHERE 子句中包含多个条件的查询。

PostgreSQL 索引的类型

所有索引类型都使用各种算法和存储结构来管理不同类型的命令。

在 PostgreSQL 中,索引可以分为不同的部分,如下所示

  • Hash 索引
  • B-tree 索引
  • GIN 索引
  • GiST 索引
  • SP-GiST 索引
  • BRIN 索引

Hash 索引

当索引列包含在表中并与 等于 (=) 运算符 比较时,Hash 索引只能处理简单的相等 比较 (=) 运算符。

对于这种类型的场景,开发人员会考虑使用哈希索引。

我们可以使用带有 HASH indexCREATE INDEX 命令 并在 USING 子句 中创建哈希索引,正如我们可以在以下说明中看到的那样

B-tree 索引

PostgreSQL 中最重要的已使用索引是 B-tree 索引。

B-Tree 索引是一个平衡树,它保持排序的数据并允许在 对数时间内插入、搜索、删除顺序访问

当索引列包含在评估中时,PostgreSQL 开发人员会考虑使用 B-tree 索引,该评估使用以下运算符列表之一

  • <
  • <=
  • =
  • >=
  • BETWEEN
  • IN
  • IS NULL
  • IS NOT NULL

此外,对于模式匹配运算符 LIKE 和 ~ 命令,查询开发人员可以使用 B-tree 索引。

如果模式是持久的并且是模式的开头锚点,则如此处示例所示

  • 此外,对于 ILIKE 和 ~*, 如果模式以 非字母字符 开头,这些字符不受大写/小写转换的影响,那么 PostgreSQL 开发人员将故意使用 B-tree 索引。
  • 如果我们要开始使用索引来优化 PostgreSQL 数据库,则 B-tree 是一个很好的选择。
  • 如果我们在没有描述任何索引类型的情况下使用 CREATE INDEX 命令,那么 PostgreSQL 默认使用 B-tree 索引类型,因为它最适合并且是最常见的查询。

GIN 索引

  • 下一类 PostgreSQL 索引是 GIN,它代表 广义倒排索引,通常表示为 GIN
  • 如果我们在单个列中存储了多个值,例如 范围类型、数组、jsonb 和 hstore,则 GIN 索引最有利。

GiST 索引

  • GiST 索引 最常用于全文搜索和几何数据类型的索引。
  • Generalized Search Tree 表示 GiST 索引,它提供了一般树结构的构建。

SP-GiST 索引

  • Space-Partitioned GiST 表示为 SP- GiST,它保持分区的搜索树,这使得能够开发各种不同的非平衡数据结构。
  • 包含自然聚类元素的 数据 也不是一个 均衡的树,比如 多媒体、GIS、IP 路由、电话路由和 IP 路由, 在这种情况下,我们可以使用 SP-GiST

BRIN

  • 由于其成本较低且比 B-tree 索引小得多,因此 BRIN 索引可以轻松维护,它代表 块范围索引
  • 通常,BRIN 索引用于包含线性排序顺序的列,例如 销售订单 的生成的日期列
  • 在 PostgreSQL 索引中,BRIN 允许对大型表使用索引,而以前没有并行分区就无法使用 B-tree。

使用 PostgreSQL 索引的缺点

我们有以下避免 PostgreSQL 索引的原因

  • PostgreSQL 索引不应用于包含大量 NULL 值的列。
  • PostgreSQL 索引不能与小表一起使用。
  • 我们不为经常部署的列创建索引。
  • 我们不为具有频繁、大批量更新或插入操作的表创建索引。

概述

PostgreSQL 索引 部分,我们学习了以下主题

  • PostgreSQL 索引 用于增强从数据库中检索数据的能力。
  • 我们已经理解了 PostgreSQL 索引的 特性
  • 我们还了解到,PostgreSQL 索引支持各种命令,例如 创建索引、删除索引、列出索引、唯一索引、表达式上的索引、部分索引、重新索引、多列索引。
  • 我们还学习了多种类型的 PostgreSQL 索引,包括 HASH 索引、B-tree 索引、GIN 索引、BRIN 索引、GiST 索引和 SP-GiST 索引。
  • 而且我们也了解了使用 PostgreSQL 索引的缺点。