PostgreSQL 索引表达式
在本节中,我们将了解索引对表达式的控制,这有助于我们提高包含表达式的命令的性能。此外,请参阅PostgreSQL 索引的示例expression 。
什么是表达式的 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 索引在表达式上的工作。
我们正在使用我们在PostgreSQL 教程的前面部分中创建的Employee表。
如果我们想查看员工表中的数据,我们将使用SELECT命令,如下面的命令所示:
Select * from employee;
执行上述命令后,我们将得到以下结果,其中包含emp_id、emp_fname、emp_lname、location 和 joining_date等各个列,如下面的屏幕截图所示:
Employee 表有一个为emp_fname列定义的B-Tree 索引。以下命令用于识别emp_lname为 Brown 的员工:
SELECT emp_id, emp_fname,emp_lname
FROM employee
WHERE emp_lname = 'Brown';
执行上述命令后,我们将得到以下输出,其中显示了emp_lname为Brown的员工。
然后,我们执行以下命令,其中 PostgreSQL 使用EXPLAIN命令使用idx_emp_lname索引:
EXPLAIN
SELECT emp_id, emp_fname,emp_lname
FROM employee
WHERE(emp_lname) = 'Brown';
我们将在执行上述命令时得到以下消息,其中显示了employee表的查询计划。
为了增强上述命令,我们可以指定索引表达式,如下命令所示:
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';
执行上面的命令后,我们会得到如下结果:
热门文章
优秀文章