我知道如果我有两个问题,如:
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
答案 0 :(得分:0)
如果您想为这两个查询创建一个索引,我建议(type, picked_at)
上使用一个索引。
如果索引中需要state
,则可能需要两个索引。