Postgresql 索引设计:有序组合索引

Postgresql index design: combined indexes ordered

我知道如果我有两个查询,例如:

SELECT * FROM fruits WHERE type='apple'

SELECT * FROM fruits WHERE type='orange' AND state='rotten'

那么有效索引为:

CREATE INDEX type_state_index_on_fruits ON fruits(type, state) USING btree;

因为它可以将索引用于第一个和第二个查询。

然而,如果有排序进入这个会发生什么:

SELECT * FROM fruits WHERE type='orange' AND state='rotten' ORDER BY picked_at ASC

我能否有效地创建类型和状态的有序索引,但按 picket_at 排序,以便数据库在两种情况下都不必在获取行后进行排序:

SELECT * FROM fruits WHERE type='apple' ORDER BY picked_at ASC
SELECT * FROM fruits WHERE type='orange' AND state='rotten' ORDER BY picked_at ASC

如果你想为两个查询使用一个索引,我建议在 (type, picked_at) 上使用一个索引。

如果您需要在索引中包含 state,您可能需要两个索引。