📜  PostgreSQL索引

📅  最后修改于: 2020-11-30 09:33:49             🧑  作者: Mango

PostgreSQL索引

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

什么是PostgreSQL索引?

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

数据库索引与书籍索引平行。索引创建对所有值的访问,并显示在索引列上。

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

PostgreSQL索引的功能

PostgreSQL索引的一些基本功能如下:

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

在PostgreSQL索引下执行的命令:

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

让我们一一理解它们:

Commands Description
Create Index It is used to create a new index by defining the index name and table or column name on which the index is created.
Drop Index The Drop index command is used to delete the current index.
List indexes It is used to represent how to list all indexes in the PostgreSQL database.
Unique Index The Unique index command allows us to specify the unique indexes step by step.
Index on Expression It is used to specify an index based on expressions.
Partial index The partial index is used to display the use of partial indexes.
Re-index To rebuild one or more indices, we can use the REINDEX command.
Multicolumn Indexes It is used to display multicolumn indexes usage to enhance the queries with several conditions in the WHERE clause.

PostgreSQL索引的类型

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

在PostgreSQL中,索引可以分为多个部分,如下所示:

  • 哈希索引
  • B树索引
  • GIN指数
  • GiST索引
  • SP-GiST索引
  • BRIN指数

哈希索引

当表中包含索引列并将其与equal(=)运算符,Hash索引只能使用简单的equals comparison(=)运算符。

对于这种情况,开发人员将考虑哈希索引。

我们可以将CREATE INDEX命令USING子句中的HASH索引一起使用,以创建一个哈希索引,如下图所示:

CREATE INDEX index_name 
ON table_name 
USING HASH (indexed_column);

B树索引

PostgreSQL中最重要的使用索引是B树索引。

B树索引是一个平衡树,它保留排序的数据并允许以对数时间插入,搜索,删除和顺序访问。

当评估中包括索引列时,PostgreSQL开发人员将考虑使用B树索引,该评估使用以下运算符列表之一:

  • <
  • <=
  • =
  • > =
  • 之间
  • 一片空白
  • 不为空

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

并且如果模式是持久模式并且是模式开始时的锚点,如下面的示例所示:

column_name LIKE 'abb%' 
column_name  ~ '^abb'
column_name LKE 'abc%' 
  • 另外,对于ILIKE和〜*,如果模式以非字母字符开头(不受大小写转换的影响),则PostgreSQL开发人员将故意使用B树索引。
  • 如果我们已经开始使用索引来优化PostgreSQL数据库,那么B树是一个很好的选择。
  • 如果我们在不描述任何索引类型的情况下使用CREATE INDEX命令,则PostgreSQL默认使用B树索引类型,因为它是最适合也是最常见的查询。

GIN索引

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

GiST索引

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

SP-GiST索引

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

布林

  • 与B树索引相比,BRIN索引更便宜,更小,因此可以轻松维护BRIN索引,它代表Block Range Indexes
  • 通常,BRIN索引用于包含线性排序顺序的列,例如销售订单的生成日期列
  • 在PostgreSQL索引中,BRIN允许在巨大的表上使用索引,而在没有并行分区的情况下,B-tree无法使用该索引。

使用PostgreSQL索引的缺点

避免PostgreSQL索引的原因如下:

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

总览

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

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