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
,您可能需要两个索引。
我知道如果我有两个查询,例如:
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
,您可能需要两个索引。