PostgreSQL 创建索引

17 Mar 2025 | 4 分钟阅读

在本节中,我们将了解 PostgreSQL 创建索引的工作原理以及 创建索引命令示例

为什么我们要使用 PostgreSQL 创建索引命令?

PostgreSQL 中, 创建索引命令用于通过定义索引名称以及要创建索引的表名或列名来创建新索引。

PostgreSQL 创建索引命令的语法

创建 索引命令的语法如下:

在上面的语法中,我们使用了以下参数,如下表所示:

参数描述
索引名称
  • 用于定义索引的名称
  • 应该写在 CREATE INDEX 之后。
  • 在这里,我们应该尝试为索引指定更简单且有意义的名称,这样更容易回忆起来。
Table_name
  • table_name 参数用于定义与索引关联的表名。
  • 它在 ON 关键字之后指定。
USING [method]
  • 用于指定索引方法,例如 B-tree、GIN、HASH、GiST、BRIN 和 SP-GiST。
  • 默认情况下,PostgreSQL 使用 B-tree 索引
Column_name
  • column_name 参数用于定义索引中存储了多个列的情况下使用的列列表。
  • ASC 和 DESC 用于定义排序顺序。默认值为 ASC
  • NULLS FIRST 或 NULLS LAST 用于描述 null 值非 null 值之前还是之后排序。
  • DESC定义时,NULLS FIRST 被认为是默认值。
  • DESC 未定义时,NULLS LAST 被认为是默认值。

注意:如果我们想确定命令是否使用索引,可以使用 EXPLAIN 命令。

PostgreSQL 创建索引的示例

让我们看一个示例,以了解 PostgreSQL CREATE Indexes 命令的工作原理。

但在讨论示例之前,我们将把索引和电话簿类比作为示例的一部分。

索引和电话簿类比

为了理解 索引和电话簿类比的实例,我们有以下情况:

情况 1:如果电话簿按字母顺序排列。

  • 假设我们需要在电话簿中查看 Mike Taylor电话号码
  • 我们知道电话簿中的姓名按字母顺序排列。
  • 因此,首先,我们将检查那些姓氏Taylor 的页面,确定名字Mike,最后检索他的电话号码

情况 2:如果电话簿不是按字母顺序排列的。

  • 假设电话簿上的姓名不是按字母顺序排列的。
  • 因此,我们应该检查所有页面,就像检查所有名称一样,直到我们找到 Mike Taylor 的电话号码。
  • 此过程称为顺序扫描,它将遍历所有条目,直到我们找到要搜索的条目。

注意

电话簿类似,存储在表中的数据可以按特定顺序准备,以加速一些搜索;因此,我们使用了索引。

可以将索引视为一种数据结构,例如 B-Tree,它以增加额外的写入和存储来维护它为代价,提高了表中数据检索的速度。

我们使用 Person_detalis 表,该表是我们之前在 PostgreSQL 教程的章节中创建的。

Person_deatils 表包含各种列,例如 id、Person_name 和 Mobile_number,如下面的屏幕截图所示。

PostgreSQL Create Index

在下面的命令中,我们将尝试识别手机号码(444)-333-1234 的人的姓名。

输出

执行上述命令后,我们将获得以下输出,我们成功识别出手机号码(444)-333-1234人名,即 Mike Taylor

PostgreSQL Create Index

很容易理解,数据库必须扫描完整的 Person_details 表才能识别 Person_name,因为 Mobile_number 列不存在索引。

在这里,我们可以使用 EXPLAIN 命令来查看查询计划,如下面的命令所示:

输出

执行上述命令后,我们将获得以下输出,显示 Person_details 表的 Query plan

PostgreSQL Create Index

现在,为了创建一个新索引,我们借助以下命令从 Person details 表的 Moblie_phone 列中获取值。

输出

执行上述命令后,我们将收到以下消息:idx_Person_details_Mobile 索引已成功创建。

PostgreSQL Create Index

如果我们想确定数据库引擎是否包含索引以进行查找,我们可以再次使用上面的 Explain command,如下面的命令所示:

输出

执行上述命令后,我们将收到以下消息,显示 Person_details 表的 Query plan。

PostgreSQL Create Index

概述

在 PostgreSQL 中,我们有单列索引,它有助于我们提高 PostgreSQL 索引的性能。

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

  • 我们使用 CREATE Index 命令为特定表创建一个新索引。