2011-08-21 149 views
7

我在Heroku上創建了一個rails 3應用程序,它使用postgres作爲數據庫。在我的rails遷移中,我在所有ID列上添加了索引。這是一個錯誤嗎?我開始懷疑postgres是否在ID列上有默認的索引。id列的默認索引?

如果這是一個錯誤,我該如何解決它?如果我簡單地編寫一個rails遷移來從ID列中刪除索引,那麼這會修復一切嗎?

回答

9

根據postgresql's documentation

Adding a primary key will automatically create a unique btree index on the column 
or group of columns used in the primary key. 

Hovewer,這並不妨礙您創建在同一列的另一個指標。如果您使用一些不同的索引策略(例如GiST索引),則可能有意義。但是,如果您對此不確定,那麼99.9%您剛剛創建了相同的索引。

實際上,這根本不會影響應用程序功能。唯一需要關注的是索引是在更新操作上重建的,因此可能會導致一些與性能相關的問題。所以,如手冊所示,removing seldom-used indexes(最後一句),你最好從db中刪除這些索引。

我對RoR遷移並不十分熟悉,但我認爲通過遷移來刪除這些索引就足夠了。

+0

如果我運行查詢刪除索引的ID將它刪除「兩個」? – Brand

+0

不,刪除索引的查詢會命名要刪除的特定索引。所以,drop index yada只會導致名爲yada的索引被丟棄。 –

0

用\ d「表名」檢查表中存在哪些索引。所有這些都列在那裏,包括自動創建的。如果您發現重複項,很容易刪除一個(「tablename」上的drop index「indexname」)。你只會刪除與相應的名稱索引...