我有以下结构。
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
不再需要了,
但是保留或删除它是否有成本或 yield ?
我的猜测是;
- 保留它会减慢插入速度
- 如果我保留它,仅使用
col_a
选择可能会更快
最佳答案
您可以在 col_a
上删除索引。如果您查询 col_a
,PostgreSQL 能够使用组合索引;如果您查询 col_a
和 col_b
,PostgreSQL 也能够使用该索引。这些查询类型可以使用组合索引:
WHERE col_a = 'val'
WHERE col_a = 'val' AND col_b = 'val'
组合索引不能仅用于查询col_b
或col_a
和col_b
的OR
连接。因此,如果您经常有仅查询 col_b
的查询,则在 col_b
上添加额外的索引是有意义的。
编辑:所以:创建 index_on_col_a
没有优势,但写入速度较慢。放下它。
关于sql - 在 Postgresql 中使用重复索引有什么坏处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9801674/