8

我有以下结构。

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可能会更快
4

1 回答 1

6

您可以将索引放在col_a. 如果您查询 PostgreSQL 可以使用组合索引,如果您查询和col_a也可以使用该索引。这些查询类型可以使用组合索引:col_acol_b

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

组合索引不能用于仅查询col_b或and的OR连接。因此,如果您经常只进行查询,那么额外的索引可能会有意义。col_acol_bcol_bcol_b

编辑:所以:你没有优势创建index_on_col_a,但你的写入速度较慢。算了吧。

于 2012-03-21T09:59:13.787 回答