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

时间:2012-03-21 09:23:24

标签: 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 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选择可能会更快,如果我保留它

1 个答案:

答案 0 :(得分:6)

您可以删除col_a上的索引。如果您在col_a上查询,PostgreSQL可以使用组合索引,如果您在col_acol_b上查询,也可以使用索引。这些查询类型可以使用组合索引:

WHERE col_a = 'val'
WHERE col_a = 'val' AND col_b = 'val'

组合索引不能仅用于查询col_bORcol_a的{​​{1}}联合。因此,如果您经常只查询col_b的查询,则col_b上的附加索引就有意义。

编辑:所以:你没有创建col_b的优势,但你的写入速度较慢。放弃它。