有什么理由不在ActiveRecord中的外键列上创建索引?

时间:2013-08-18 17:54:48

标签: ruby-on-rails activerecord ruby-on-rails-3.2 ruby-on-rails-4 rails-activerecord

我了解reason ActiveRecord chooses not to deal with foreign keys。但是,出于性能原因,我需要至少在外键字段上有索引。在几乎所有带有外键列的模型中,我在关联的另一端都有一个对应的has_onehas_many,所以这些索引真的很重要。

这种标准做法是在Rails中手动创建外键列的索引吗?这样做有什么问题吗?

我知道我可以将架构样式更改为SQL,但我希望保持数据库独立性。我也知道foreigner gem。但是,我喜欢ActiveRecord的理念,我只需要更好的性能。

2 个答案:

答案 0 :(得分:12)

在Rails 4中,对此的看法似乎转向使用索引。如果使用“references”类型生成模型,它将在迁移中自动为您创建索引。

rails g model Cat owner:references

生成以下内容:

class CreateCats < ActiveRecord::Migration
  def change
    create_table :cats do |t|
      t.references :owner, index: true

      t.timestamps
    end
  end
end

答案 1 :(得分:2)

使用rails3,只需在迁移中添加索引,在create_table调用后,使用add_index创建所需的索引。

这样做和it is considered a good practice没有问题。

使用rails 4,使用t.references作为外键,将自动创建索引。