2012-03-21 10 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は必要ありませんが、 は維持または削除するコストまたは利益がありますか?

私の推測です。

  • それだけでcol_aを使用して挿入
  • 選択は私が
+0

あなたはすでに答えを知っているようですか? – Andomar

+0

うーん...私は質問で推測を避けるべきですか?多分誰かが推測よりも確かなものを持っているかもしれません。 –

+1

場合によっては、パフォーマンスやクエリのパフォーマンスが向上する 私の個人的な意見から、私たちはドロップインデックスindex_on_col_a – francs

答えて

6

それを維持する場合は、col_aにインデックスを削除することができます速いかもしれ遅くなります保ちます。 PostgreSQLは、col_aでクエリを実行した場合、結合インデックスを使用することができ、col_acol_bでクエリを実行するとインデックスを使用することもできます。合わせたインデックスのみcol_bを照会するために使用することができない

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

又はcol_acol_bORジャンクション:これらのクエリの種類を組み合わせたインデックスを使用することができます。したがって、col_b以上の追加のインデックスは、たぶんcol_bというクエリのみをクエリする場合に意味があります。

編集:したがって、index_on_col_aを作成する利点はありませんが、書き込み速度が遅くなります。もうやめろ。

関連する問題