我理解ActiveRecord 选择不处理外键的原因。但是,出于性能原因,我至少需要在外键字段上建立索引。在我几乎所有带有外键列的模型上,我都有一个对应的has_one
或has_many
在关联的另一端,所以这些索引真的很重要。
这是在 Rails 中为外键列手动创建索引的标准做法吗?这样做有什么问题吗?
我知道我可以将架构样式更改为 SQL,但我想保持数据库独立性。我也知道外国人宝石。但是,我喜欢 ActiveRecord 的理念,我只需要更好的性能。
我理解ActiveRecord 选择不处理外键的原因。但是,出于性能原因,我至少需要在外键字段上建立索引。在我几乎所有带有外键列的模型上,我都有一个对应的has_one
或has_many
在关联的另一端,所以这些索引真的很重要。
这是在 Rails 中为外键列手动创建索引的标准做法吗?这样做有什么问题吗?
我知道我可以将架构样式更改为 SQL,但我想保持数据库独立性。我也知道外国人宝石。但是,我喜欢 ActiveRecord 的理念,我只需要更好的性能。
在 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
使用 rails3,只需在迁移中添加您的索引,在create_table
调用之后,用于add_index
创建您需要的索引。
这样做没有问题,这被认为是一种很好的做法。
使用 rails 4,t.references
用于您的外键和索引将被自动创建。