2012-03-21 51 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的優勢,但是你的寫入速度較慢。算了吧。

  • 相關問題