PostgreSQL 在表达式上建立索引

2025年3月17日 | 阅读 3 分钟

在本节中,我们将了解表达式索引的控制,这有助于我们提高命令的性能,这些命令还包括表达式。 并且,还将看到 PostgreSQL 表达式索引示例

什么是 PostgreSQL 表达式索引?

通常,创建索引 是指表的一个或多个列。 但是我们也可以创建一个基于表达式的索引,其中包括表列,这些场景称为表达式索引。

基于函数的索引 称为 表达式索引

PostgreSQL 表达式索引的语法

为了在表达式上创建索引,我们有以下说明

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

参数描述
Index_nameindex_name 用于定义索引名称,它写在 CREATE INDEX 命令之后。
table_name它创建一个表达式,其中包括表名称的表列。
表达式当我们指定索引表达式时,该表达式是在 SQL 命令中的 Order BY 或 WHERE 子句中指定的。

注意

  • 表达式索引的维护非常昂贵,因为 PostgreSQL 必须评估每一行的表达式。
  • 因此,如果检索速度比插入和更新速度更重要,我们可以使用 表达式索引

PostgreSQL 表达式索引的示例

让我们看一个示例来了解 PostgreSQL 表达式索引 的工作原理。

我们采用 Employee 表,该表是在 PostgreSQL 教程 的早期部分中创建的。

并且如果我们想查看 employee 表中存在的数据,我们将使用 SELECT 命令,如下面的命令所示

输出

执行上述命令后,我们将获得以下结果,其中包含各种列,例如 emp_id、emp_fname、emp_lname、location 和 joining_date,如下面的屏幕截图所示

PostgreSQL Index on Expression

Employee 表为 emp_fname 列定义了一个 B-Tree 索引。 以下命令用于标识那些 emp_lname 为 Brown 的员工

输出

实现上述命令后,我们将获得以下输出,其中显示了 emp_lnameBrownemployee

PostgreSQL Index on Expression

然后,我们执行以下命令,其中 PostgreSQL 使用 EXPLAIN 命令使用 idx_emp_lname 索引

输出

执行上述命令后,我们将获得以下输出:PostgreSQL 优化器将 Idx_emp_lname 索引用于 employee 表。

PostgreSQL Index on Expression

在下面的命令中,我们将尝试识别那些 emp_lname大写 形式为 Brown 的员工。 但是,PostgreSQL 无法使用索引进行查找,如下所示

输出

执行上述命令后,我们将收到以下消息,该消息显示了 employee 表的查询计划。

PostgreSQL Index on Expression

为了增强上述命令,我们可以指定 索引表达式,如下面的命令所示

输出

在我们执行上述命令后,idex_ic_emp_lname 索引已成功创建。

PostgreSQL Index on Expression

现在我们将执行以下命令,该命令可帮助我们以不区分大小写的方式根据 emp_lname 识别员工,并使用 expression index,正如我们在以下命令中看到的那样

输出

执行上述命令后,我们将获得以下结果

PostgreSQL Index on Expression

概述

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

  • 我们了解到 PostgreSQL 表达式索引 用于增强包含包含表列的表达式的查询。