0

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

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

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

4

1 回答 1

1

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

从理论上讲,您可以只拥有 (id,country) 并仍然使用它来强制 id 的唯一性,但 PostgreSQL 目前不支持这一点。

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

如果您想强制 PostgreSQL 不使用特定索引来查看它消失后会发生什么,您可以将其放入事务中,然后在完成后将其回滚:

开始; 删除索引 table_id_country_idx;解释分析 select * from ....;回滚;

于 2013-09-18T18:34:01.427 回答