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

时间:2016-08-22 13:03:03

标签: postgresql indexing postgresql-9.3

我知道如果我有两个问题,如:

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

1 个答案:

答案 0 :(得分:0)

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

如果索引中需要state,则可能需要两个索引。