Postgresql 9.2+是否包含其他索引中的PK字段

时间:2013-10-03 22:12:51

标签: postgresql indexing

我正在努力提高查找性能。假设我有一张桌子

CREATE TABLE tab (
  id SERIAL, -- PRIMARY KEY
  code VARCHAR(20),
  ....
  ....
);

我需要通过“代码”仅查找“id”(PK)值(不需要该表中的任何其他字段),如下所示。

SELECT id FROM tab WHERE code IN ('a', 'b', 'c').

我可以在“代码”上创建一个简单的索引,如下所示:

CREATE INDEX tab_code_idx ON tab USING btree(code);

我也知道PostgreSQL 9.2+在索引包含查询中引用的所有字段的情况下实现仅索引扫描。所以我的问题是这个。我是否可以从创建包含“code”和“id”的索引中受益:

CREATE INDEX tab_code_id_idx ON tab USING btree(code, id);

我搜索并找到有关PK值是否包含在该表上的其他索引的任何信息。如果PK包含在所有索引中,那么我只需要索引“代码”以查找“id”值。

1 个答案:

答案 0 :(得分:2)

创建PK时,会创建包含PK列的相应索引。没有创建其他索引。要在psql提示符下显示该表类型的所有索引:

=> \d tab

包含codeid的索引是该查询中仅索引扫描所必需的。