PostgreSQL 表达式索引
在本节中,我们将了解表达式的索引控制,这有助于我们增强命令的性能
什么是表达式上的PostgreSQL索引?
通常,创建索引引用表的一个或多个列。但是我们也可以基于表达式创建一个索引,其中包括表列,并且这些情况被称为表达式索引。
基于功能的索引被称为表达式索引。
PostgreSQL表达式表达式索引
用于在表达式上创建索引,我们有以下插图:
CREATE INDEX index_name
ON table_name (expression);
在上面的语法中,我们使用了以下参数,如下表所示:
参数 |
说明 |
index_name |
index_name用于定义索引名称,并在CREATE INDEX命令之后写入。 |
table_name |
它将创建一个包含表名称的表列的表达式。 |
expression |
当我们指定索引表达式时,该表达式可以在SQL命令的Order BY或WHERE子句中指定。 |
注意:
由于PostgreSQL必须评估每一行的表达式,因此维护表达式索引非常昂贵。
因此,如果检索速度比插入和更新速度更为关键,我们可以使用表达式的索引。
关于表达式的PostgreSQL索引的示例
让我们看一个示例示例,以了解 PostgreSQL表达式的索引的工作。
我们正在使用 Employee 表,该表是在 PostgreSQL教程。
如果我们想查看 员工 表中的数据,我们将使用 SELECT 命令,如以下命令所示:
输出
执行上述命令后,我们将获得以下结果,其中包含各个列,例如 emp_id,emp_fname,emp_lname,位置,以及加入日期,如以下屏幕截图所示:

"员工"表具有为 emp_fname 列定义的 B树索引。以下命令用于标识 emp_lname 为Brown的那些员工:
SELECT emp_id, emp_fname,emp_lname
FROM employee
WHERE emp_lname = 'Brown';
输出
执行上述命令后,我们将获得以下输出,其中显示了员工,其 emp_lname 是棕色。
然后,我们实现以下命令,其中PostgreSQL通过 EXPLAIN 命令使用 idx_emp_lname 索引:
EXPLAIN
SELECT emp_id, emp_fname,emp_lname
FROM employee
WHERE(emp_lname) = 'Brown';
输出
执行上述命令后,我们将获得以下输出: PostgreSQL优化器将 Idx_emp_lname 索引用于员工 表。
在以下命令中,我们将尝试识别大写中的 emp_lname 为 Brown 的那些员工。但是PostgreSQL无法使用索引进行查找,如下所示:
EXPLAIN
SELECT emp_id, emp_fname,emp_lname
FROM employee
WHERE UPPER(emp_lname) ='Brown';
输出
执行上述命令后,我们将获得以下消息,其中显示了员工表的查询计划。
要增强上述命令,我们可以指定 index表达式, ,如以下命令所示:
CREATE INDEX idex_ic_emp_lname
ON employee(UPPER(emp_lname));
输出
执行上述命令后,已成功创建 idex_ic_emp_lname 索引。
我们现在将实现以下命令,该命令可帮助我们根据 emp_lname识别员工(不区分大小写),并在表达式上使用索引,如下面的命令所示:
EXPLAIN
SELECT emp_id, emp_fname,emp_lname
FROM employee
WHERE UPPER(emp_lname) ='Brown';
输出
执行上述命令后,我们将得到以下结果:
概述
在 PostgreSQL的表达式索引部分中,学习了以下主题:
我们已经了解到 PostgreSQL表达式上的索引用于增强查询,该查询包含一个包含表列的表达式。