2011-08-21 143 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”)。你只会删除与相应的名称索引...