【问题标题】:Postgresql index design: combined indexes orderedPostgresql索引设计:组合索引排序
【发布时间】:2016-12-29 01:13:19
【问题描述】:

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

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

【问题讨论】:

标签: postgresql indexing postgresql-9.3


【解决方案1】:

如果您希望两个查询都使用一个索引,我建议在 (type, picked_at) 上使用一个索引。

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

【讨论】:

    猜你喜欢
    • 2017-03-22
    • 2015-11-11
    • 2015-12-31
    • 1970-01-01
    • 2016-06-03
    • 2012-12-20
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多