PostgreSQL Indexes


PostgreSQL Indexes

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

什么是 PostgreSQL Indexes?

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

一个数据库Indexes是平行于一本书的Indexes。Indexes创建对所有值的访问,这些值显示在Indexes列上。

Indexes有助于数据库服务器比没有Indexes时更快地识别定义的行。我们必须正确使用Indexes才能获得显着的结果。

PostgreSQL Indexes的特点

PostgreSQL Indexes的一些基本特性如下:

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

在 PostgreSQL Indexes下执行的命令:

在 PostgreSQL Indexes中,我们可以执行以下命令:

  • Create Index
  • Drop Index
  • List indexes
  • Unique Index
  • Index on Expression
  • Partial index
  • Re-index
  • Multicolumn Indexes

让我们一一了解它们:

命令 描述
Create Index 它用于通过定义Indexes名称和创建Indexes的表或列名称来创建新Indexes。
Drop Index DROP INDEX命令用于删除当前Indexes。
List indexes 它用于表示如何列出 PostgreSQL 数据库中的所有Indexes。
Unique Index 唯一Indexes命令允许我们指定的唯一Indexes一步一步来。
Index on Expression 它用于根据表达式指定Indexes。
Partial index 部分Indexes用于显示使用部分的Indexes。
Re-index 要重建一个或多个Indexes,我们可以使用 REINDEX 命令。
Multicolumn Indexes 它用于显示多列Indexes的使用情况,以增强 WHERE 子句中具有多个条件的查询。

PostgreSQL Indexes的类型

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

在PostgreSQL中,Indexes可以分为不同的部分,具体如下:

  • Hash Indexes
  • B-tree Indexes
  • GIN Indexes
  • GiST Indexes
  • SP-GiST indexes
  • BRIN Indexes

哈希Indexes

当表中包含Indexes列并与相等 (=) 运算符进行比较时,哈希Indexes只能处理简单的相等比较 (=)运算符。

对于这种类型的场景,开发者会考虑使用哈希Indexes。

我们可以在USING 子句使用带有HASH IndexesCREATE INDEX命令来创建一个哈希Indexes,如下图所示:

CREATE INDEX index_name   
ON table_name   
USING HASH (indexed_column);

B-tree indexes

PostgreSQL 中最重要的使用Indexes是BB-tree indexes

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

当Indexes列包含在评估中时,PostgreSQL 开发人员将考虑使用B 树Indexes,它使用以下运算符列表之一:

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

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

如果模式是持久的并且是模式开头的锚点,我们可以在以下示例中看到:

column_name LIKE 'abb%'   
column_name  ~ '^abb'  
column_name LKE 'abc%'
  • 另外,对于ILIKE和~*,如果模式以非字母字符开头,不受大写/小写转换的影响,那么PostgreSQL开发人员会故意使用B-treeIndexes。
  • B树是一个非常不错的选择,如果我们使用Indexes来优化我们的PostgreSQL数据库启动。
  • 如果我们使用CREATE INDEX命令而不描述任何Indexes类型,那么 PostgreSQL默认使用B-treeIndexes类型,因为它是最合适和最常见的查询。

GIN Indexes

  • PostgreSQL Indexes的下一种类型是GIN,它代表Generalized Inverted Indexes,通常表示为GIN
  • 如果我们将多个值存储在单个列中,例如范围类型、数组、jsonb 和 hstore,则 GIN Indexes最有用。

GiST Indexes

  • GiSTIndexes是最常用的全文检索和几何数据类型的Indexes。
  • 通用搜索树表示GiSTIndexes,它提供通用的树结构的建筑。

SP-GiST Indexes

  • 空间分割的要点记SP-GiST的,保持了分区搜索树,这使广泛的不同的非平衡数据结构的范围内的发展。
  • 包含自然聚类元素的数据也不是均衡的树,如多媒体、GIS、IP路由、电话路由和IP路由,在这种情况下,我们可以使用SP-GiST

BRIN

  • 该BRIN指标可以很容易地保持,因为它是成本更低,相对于B树Indexes要小得多,它代表了

    块范围Indexes

    通常,BRIN Indexes用于包含线性排序顺序的列,例如销售订单的生成日期列

  • 在 PostgreSQL Indexes中,BRIN 允许在一个巨大的表上使用Indexes,这在没有并行分区的 B-tree 早期是无法使用的。

使用 PostgreSQL Indexes的缺点

我们避免使用 PostgreSQL Indexes有以下原因:

  • 不应在包含大量 NULL 值的列上使用 PostgreSQL Indexes。
  • PostgreSQL Indexes不能用于小表。
  • 我们不会为经常部署的列创建Indexes。
  • 我们不为表创建Indexes,使用频繁的大批量更新或插入操作。

概述

PostgreSQL Indexes部分,我们学习了以下主题:

  • PostgreSQL的指标被用来增强从数据库中检索数据。
  • 我们已经了解了PostgreSQL Indexes的特性
  • 我们还了解到 PostgreSQL Indexes支持各种命令,例如创建Indexes、删除Indexes、列表Indexes、唯一Indexes、表达式Indexes、部分Indexes、重新Indexes、多列Indexes。
  • 我们还学习了多种类型的PostgreSQLIndexes,包括HASHIndexes、B-treeIndexes、GINIndexes、BRINIndexes、GiSTIndexes和SP-GiSTIndexes。
  • 我们还了解到使用PostgreSQL Indexes的缺点