我正在尝试提高查找性能。假设我有一张桌子
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+ 仅在索引包含查询中引用的所有字段的情况下实现索引扫描。所以我的问题是这个。我会从创建包含“代码”和“id”的索引中受益吗:
CREATE INDEX tab_code_id_idx ON tab USING btree(code, id);
我搜索并可以找到有关 PK 值是否包含在该表的其他索引中的任何信息。如果 PK 包含在所有索引中,那么我只需要索引“代码”即可查找“id”值。