我有以下结构。
CREATE TABLE join_table (
id integer NOT NULL,
col_a integer NOT NULL,
col_b integer NOT NULL
)
CREATE INDEX index_on_col_a ON join_table USING btree (col_a);
CREATE INDEX index_on_col_b ON join_table USING btree (col_b);
CREATE UNIQUE INDEX index_on_col_a_and_col_b ON join_table USING btree (col_a, col_b);
col_a和col_b上也有外键。
显然不再需要index_on_col_a
,
但保留或删除它是否有成本或好处?
我的猜测是;
col_a
选择可能会更快,如果我保留它答案 0 :(得分:6)
您可以删除col_a
上的索引。如果您在col_a
上查询,PostgreSQL可以使用组合索引,如果您在col_a
和col_b
上查询,也可以使用索引。这些查询类型可以使用组合索引:
WHERE col_a = 'val'
WHERE col_a = 'val' AND col_b = 'val'
组合索引不能仅用于查询col_b
或OR
和col_a
的{{1}}联合。因此,如果您经常只查询col_b
的查询,则col_b
上的附加索引就有意义。
编辑:所以:你没有创建col_b
的优势,但你的写入速度较慢。放弃它。