PostgreSQL 索引17 Mar 2025 | 5 分钟阅读 在本节中,我们将更有效地理解 PostgreSQL 索引 的工作原理,为什么我们需要使用索引、PostgreSQL 索引的特性、不同类型的索引, 以及在 PostgreSQL 索引部分下执行的各种命令。 什么是 PostgreSQL 索引?在 PostgreSQL 中,索引是用于增强从数据库中检索数据的特殊工具。 数据库索引 与书的索引类似。 索引为所有值创建一个访问,这些值显示在被索引的列上。 索引倾向于帮助数据库服务器更快地识别定义的行,而不是没有索引时所能做到的。 我们必须正确地使用 索引 才能获得显著的结果。 PostgreSQL 索引的特性PostgreSQL 索引的一些基本特征如下: - 索引用于增强带有 SELECT 和 WHERE 的数据输出
- 如果我们使用 INSERT 和 UPDATE 命令,它会减慢数据输入的速度。
- 在不影响任何数据的情况下,我们可以 创建 和 删除 索引
- 我们可以通过定义创建索引的 索引名称 和 表或列名称,在 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 index 的 CREATE 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 索引的缺点。
|