PostgreSQLIndexonExpression-PostgreSQL教程|
PostgreSQL Index on Expression
在本节中,我们将了解对表达式的索引控制,这有助于我们提高也包含表达式的命令的性能。此外,请参阅表达式上的PostgreSQL 索引**示例**。
表达式上的 PostgreSQL 索引是什么?
通常,创建索引是指表的一个或多个列。但是我们也可以基于表达式创建索引,其中包括表列,这些场景被称为Index on Expression。
基于函数的索引称为Index on Expression。
PostgreSQL 索引在表达式上的语法
为了在表达式上创建索引,我们有以下说明:
- CREATE INDEX index_name
- ON table_name (表达式);
在上面的语法中,我们使用了以下参数,如下表所示:
参数 | 描述 |
---|---|
Index_name | index_name 用于定义索引名称,写在 CREATE INDEX 命令之后。 |
table_name | 它创建一个包含表名的表列的表达式。 |
expression | 当我们指定索引表达式时,该表达式是在 SQL 命令的 Order BY 或 WHERE 子句中指定的。 |
笔记:
- Index on Expression的维护非常昂贵,因为 PostgreSQL 必须评估每一行的表达式。
- 因此,如果检索速度比插入和更新速度更重要,我们可以使用表达式的索引。
表达式上的 PostgreSQL 索引示例
让我们看一个示例示例来了解PostgreSQL 索引在表达式上的工作。
我们正在使用Employee表,该表是在PostgreSQL 教程的前面部分中创建的。
如果我们想查看员工表中存在的数据,我们将使用SELECT命令,如下面的命令所示:
- 从 员工中选择 * ;
输出
执行上述命令后,我们将得到以下结果,其中包含emp_id、emp_fname、emp_lname、location 和 join_date等各个列,如下面的屏幕截图所示:
Employee 表具有为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的是布朗在大写。但是 PostgreSQL 不能使用索引进行查找,如下所示:
EXPLAIN
SELECT emp_id, emp_fname,emp_lname
FROM employee
WHERE UPPER(emp_lname) ='Brown';
输出
我们将在执行上述命令时得到以下消息,其中显示了员工表的查询计划。
为了增强上面的命令,我们可以指定索引表达式,如下命令所示:
CREATE INDEX idex_ic_emp_lname
ON employee(UPPER(emp_lname));
输出
该idex_ic_emp_lname我们执行上述命令后,指数已成功创建。
我们现在将实现以下命令,它帮助我们以不区分大小写的方式根据emp_lname识别员工,并使用expression 上的索引,如我们在以下命令中所见:
EXPLAIN
SELECT emp_id, emp_fname,emp_lname
FROM employee
WHERE UPPER(emp_lname) ='Brown';
输出
执行上述命令后,我们将得到如下结果:
概述
在PostgreSQL Index on Expression部分,我们学习了以下主题:
- 我们已经了解,PostgreSQL 上的索引用于增强查询,其中包含包含表列的表达式。
相关文章:
相关推荐:
- [PostgreSQL教程]PostgreSQL与SQLite-PostgreSQL教程|
- [PostgreSQL教程]MongoDB与PostgreSQL-PostgreSQL教程|
- [PostgreSQL教程]psqlcommands-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLDate&TimeFunction-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLFunctions-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLMulti-columnIndexes-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL禁用触发器-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL左连接-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLANDCondition-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL获取子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQL与Oracle-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- PostgreSQL与SQLServer-PostgreSQL教程|
- MongoDB与PostgreSQL-PostgreSQL教程|
- PostgreSQLEXCEPT-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|
- psqlcommands-PostgreSQL教程|
- PostgreSQLDate&TimeFunction-PostgreSQL教程|
- PostgreSQL删除触发器-PostgreSQL教程|
- PostgreSQLOrderby子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLAlias-PostgreSQL教程|
- PostgreSQLNot-NullConstraint-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|
- PostgreSQLMulti-columnIndexes-PostgreSQL教程|
- PostgreSQL左连接-PostgreSQL教程|