id列的默认索引?

时间:2011-08-21 14:37:10

标签: ruby-on-rails-3 postgresql heroku

我正在Heroku上创建一个rails 3应用程序,它使用postgres作为数据库。在我的rails迁移中,我在所有ID列上添加了索引。这是一个错误吗?我开始怀疑postgres是否在ID列上默认有索引。

如果是错误,我该如何解决?如果我只是编写一个rails迁移来从ID列中删除索引那么会修复所有内容吗?

2 个答案:

答案 0 :(得分: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迁移不太熟悉,但我认为通过迁移删除这些索引就足够了。

答案 1 :(得分:0)

使用\ d“tablename”检查表中是否存在哪些索引。所有这些都列在那里,包括自动创建的。如果您发现重复项,则很容易删除一个(“tablename”上的drop index“indexname”)。您只能删除具有相应名称的索引...