postgres中的多个索引如何在同一列上工作

时间:2013-09-18 13:16:23

标签: postgresql indexing

我想知道我不确定多个索引在同一列上是如何工作的。

所以我想说我有一个id列和一个国家列。在那些我有id的索引和id和country的另一个索引。当我执行我的查询计划时,看起来它使用这两个索引。我只是想知道它是如何工作的?我可以强制它只使用id和country索引。

这样做也是不好的做法?何时多次索引同一列是个好主意?

1 个答案:

答案 0 :(得分:1)

如果您的查询受益于每个索引,则通常在(id)和(country,id),或者(country)和(country,id)上都有索引。如果您希望(id,country)上的“覆盖”索引支持仅索引扫描,您可能还有(id)和(id,country),但仍需要支持以强制执行唯一约束。

理论上你可以拥有(id,country)并且仍然使用它来强制id的唯一性,但是PostgreSQL目前不支持它。

如果您需要支持不同的排序规则或运算符类,您还可以在同一列上合理地使用不同的索引。

如果你想迫使PostgreSQL不使用特定的索引来看看它发生了什么,你可以将它放入一个事务中,然后在完成后回滚:

BEGIN; drop index table_id_country_idx;解释分析select * from ....; ROLLBACK;