PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

11.8. 部分索引 #

部分索引(Partial Index)是建立在数据表特定行子集之上的索引结构,该子集由一个附加在索引定义末尾的布尔条件谓词(predicate)精确界定:

CREATE INDEX orders_unbilled_index ON orders (order_nr)
    WHERE billed is not true;

部分索引仅为满足该谓词条件的行生成索引条目。它的核心工程价值包括:

Example 11.1. 通过部分索引排除常见值

CREATE INDEX access_log_client_ip_ix ON access_log (client_ip)
    WHERE NOT (client_ip > inet '192.168.100.0' AND
               client_ip < inet '192.168.100.255');

Example 11.2. 通过部分索引排除非关键值

CREATE INDEX orders_unbilled_index ON orders (order_nr)
    WHERE billed is not true;

Example 11.3. 建立部分唯一索引

CREATE UNIQUE INDEX tests_success_constraint ON tests (subject, target)
    WHERE success;

Example 11.4. 避免使用部分索引替代分区表

-- 不要为每个月都单独创建部分索引,请直接使用表分区