在Postgresql中使用重复索引有什么害处吗?

在Postgresql中使用重复索引有什么害处吗?,sql,postgresql,indexing,postgresql-9.1,Sql,Postgresql,Indexing,Postgresql 9.1,我有以下结构 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

我有以下结构

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);
a列和b列上也有外键

显然,不再需要列a上的索引, 但保留或删除它是否有成本或收益

我猜是

  • 保持它会减慢插入速度
  • 仅使用
    col_a
    进行选择如果我保留它,可能会更快

您可以将索引放在
列a
上。如果查询
列a
,PostgreSQL可以使用组合索引;如果查询
列a
列b
,PostgreSQL也可以使用索引。这些查询类型可以使用组合索引:

WHERE col_a = 'val'
WHERE col_a = 'val' AND col_b = 'val'
组合索引不能仅用于查询
列b
列a
列b
的连接处。因此,如果经常有查询只查询
列b
,那么
列b
上的附加索引是有意义的


编辑:所以:在列a上创建
索引并不占优势,但写入速度较慢。放下它。

看来你已经知道答案了?嗯。。。我应该避免在问题中猜测吗?也许有人有比猜测更坚定的东西。这取决于具体情况,更好的书写性能或查询性能。但从我个人的观点来看,我们需要在col\u athanks@francs上删除索引。我通常会。我只是想证明我是对的。我想我会把它去掉。我们已经讨论过这个案子了。