📜  PostgreSQL – 部分索引

📅  最后修改于: 2022-05-13 01:57:15.663000             🧑  作者: Mango

PostgreSQL – 部分索引

在 PostgreSQL 中,部分索引用于在减小索引大小的同时提高查询性能。 PostgreSQL 部分索引甚至允许您指定应该索引的表的行。此部分索引有助于加快查询速度,同时减少索引的大小。

如果您经常使用使用常量值的 WHERE条件,则部分索引很有用,如下所示:

Syntax:
SELECT * 
FROM table_name
WHERE column_name = constant_value;

出于演示的目的,我们将使用示例数据库的客户表,即 dvdrental。

例子:



以下查询查找所有不活动的客户:

SELECT
    customer_id,
    first_name,
    last_name,
    email
FROM
    customer
WHERE
    active = 0;

要执行此查询,查询计划器需要扫描客户表,如以下EXPLAIN语句所示:

EXPLAIN SELECT
    customer_id,
    first_name,
    last_name,
    email
FROM
    customer
WHERE
    active = 0;

这将导致以下情况:

您可以通过为活动列创建索引来优化此查询,如下所示:

CREATE INDEX idx_customer_active
ON customer(active);

该索引实现了其目的,但是,它包含许多从未搜索过的行,即所有活跃客户。要定义仅包含非活动客户的索引,请使用以下语句:

CREATE INDEX idx_customer_inactive
ON customer(active)
WHERE active = 0;

从现在开始,每当 WHERE子句出现在查询中时,PostgreSQL 都会考虑部分索引:

EXPLAIN SELECT
    customer_id,
    first_name,
    last_name,
    email
FROM
    customer
WHERE
    active = 0;

输出:

对于上述情况,如果需要创建上述部分索引,请使用以下语法:

Syntax:
CREATE INDEX index_name
ON table_name(column_list)
WHERE condition;