2012-03-21 66 views
6

我有以下结构。在Postgresql中有重复索引有没有什么坏处?

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不再需要, 但是有没有保留或删除它的成本或收益?

我的猜测是,

  • 保持,如果我把它
+0

好像你已经知道答案了吗? – Andomar 2012-03-21 09:26:42

+0

嗯...我应该避免猜疑问题吗?也许有人拥有比猜测更坚定的东西。 – 2012-03-21 09:29:06

+1

这取决于情况,更好的写性能或查询性能 但是从我个人的观点来看,我们需要drop index index_on_col_a – francs 2012-03-21 09:38:45

回答

6

您可以在col_a删除索引,将插入放慢只使用col_a可能会更快

  • 选择。如果在col_a上查询,PostgreSQL能够使用组合索引,并且如果在col_acol_b上查询,也可以使用索引。这些查询类型可以使用组合索引:

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

    将合并的索引不能用于仅col_b查询或OR结的col_acol_b。因此,如果您经常只查询col_b查询,则col_b的附加索引可能有意义。

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

  • 相关问题