“has_many:thru”连接表真的需要索引的id列吗?

时间:2014-02-14 10:34:12

标签: ruby-on-rails-3.2 database-migration

在新的rails项目中工作几个小时后,我成功配置了has_many:thru与以下迁移的关联

class CreateEdits < ActiveRecord::Migration
  def change
    create_table :edits do |t|
      t.references :user
      t.references :post
      t.string :action
      t.text :summary
      t.timestamps
    end
  end
end

现在在进一步阅读该主题后发现,显然我应该添加

add_index :edits, [:user_id, :post_id], unique: true

但是关于这个主题的rails指南没有提到索引这些列的必要性。所以我想知道我是否真的需要创建一个新的迁移来添加这样的索引。我是整个轨道和编码的新手,所以我很想知道这在生产环境中是否必不可少,因为我习惯了最佳实践。

提前致谢。

1 个答案:

答案 0 :(得分:0)

基本上没有必要索引任何列。您的Rails应用程序本身不需要它们。但是,它们(通常)是数据库运行良好所必需的。

您通常从一开始就在Rails中执行的操作是索引所有{...} _ id列,因为这些列将用于查询关联。

最后,您必须根据应用程序查询数据的方式以及关键列来微调数据库索引。请记住,添加到许多索引会降低数据库速度。

另见Rails 3 Databases Indexes And Other Optimization