PostgreSQL – 表达式索引
在本文中,我们将研究利用表达式上的索引来优化具有表达式的查询性能的过程。
使用以下语法在表达式上创建索引:
Syntax:
CREATE INDEX index_name
ON table_name (expression);
我们来分析一下上面的语法:
- 在 CREATE INDEX 子句之后提及索引名称。
- 现在创建一个具有table_name 的表列的表达式。
出于演示的目的,我们将使用示例数据库的客户表,即 dvdrental。
例子:
客户表具有FIRST_NAME定义的B树索引 柱子。以下查询查找姓氏为“ Purdy”的客户:
SELECT
customer_id,
first_name,
last_name
FROM
customer
WHERE
last_name = 'Purdy';
执行此查询时,PostgreSQL 使用idx_last_name 索引如以下 EXPLAIN 语句所示:
EXPLAIN
SELECT
customer_id,
first_name,
last_name
FROM
customer
WHERE
last_name = 'Purdy';
这将导致以下结果:
为了改进这个查询,你可以定义一个这样的索引表达式:
CREATE INDEX idx_ic_last_name
ON customer(LOWER(last_name));
现在,以不区分大小写的方式根据姓氏查找客户的查询将使用表达式上的索引,如下所示:
EXPLAIN
SELECT
customer_id,
first_name,
last_name
FROM
customer
WHERE
LOWER(last_name) = 'purdy';
输出: