我正在努力提高查找性能。假设我有一张桌子
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”值。
答案 0 :(得分:2)
创建PK时,会创建包含PK列的相应索引。没有创建其他索引。要在psql提示符下显示该表类型的所有索引:
=> \d tab
包含code
和id
的索引是该查询中仅索引扫描所必需的。