sql - 在 Postgresql 中使用重复索引有什么坏处吗?

标签 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 不再需要了, 但是保留或删除它是否有成本或 yield ?

我的猜测是;

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

最佳答案

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

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

组合索引不能仅用于查询col_bcol_acol_bOR 连接。因此,如果您经常有仅查询 col_b 的查询,则在 col_b 上添加额外的索引是有意义的。

编辑:所以:创建 index_on_col_a 没有优势,但写入速度较慢。放下它。

关于sql - 在 Postgresql 中使用重复索引有什么坏处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9801674/

相关文章:

sql - 如何在 LEFT JOIN 的 ON 子句中使用字符串函数与 BigQuery 中的标准 SQL?

sql - PostgreSQL 是否共享 CTE 的顺序?

未找到 PostgreSQL 过程语言 "C"

c++ - 在不更改索引顺序的情况下从动态数组中删除元素

arrays - ElasticSearch读取数组上的元素

sql - IN 参数的数量是否会改变查询的执行计划?

mysql - 按接收者姓名以外的不同用户名分组

mysql - 建议 SQL 查询从邻接列表模型中检索所有叶节点

postgresql - 环回 - 授权 GET 用户?

r - 在 R 中创建 data.frame 列组合的索引