【问题标题】:In Rails, does ordering by created_at need an index?在 Rails 中,created_at 排序需要索引吗?
【发布时间】:2015-03-24 22:02:44
【问题描述】:

Rails 是否会自动添加索引或按 id 排序?

导轨 4。

【问题讨论】:

  • 是的,需要自己添加。是的,如果您的表中有很多行。如果你只有几百行,没有索引也没关系。你可以查看你的迁移文件,你会发现 created_at 上没有默认定义索引。
  • @cristian - 好的,谢谢。您可能想为此创建一个答案。

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


【解决方案1】:

是的,您需要自己为created_at 添加索引。

你可以查看你的迁移文件,你会发现 created_at 上没有默认定义索引。

如果只有几百行,没有索引也没关系。

编辑:

假设您有一个名为 Product 的模型,为了在 created_at 上添加索引,只需添加一个新迁移 bundle exec rails d migration AddCreatedAtIndexToProducts 然后打开你新创建的迁移并添加索引定义:

class AddCreatedAtIndexToProducts < ActiveRecord::Migration[6.0]
  def change
    add_index :products, :created_at
  end
end

【讨论】:

    【解决方案2】:

    Rails 处理在主键列上添加索引。
    从 4.2 版开始,rails 有support for foreign key indexes(注意a few gotchas

    除此之外,Rails 会将所有其他字段的索引完全由您决定。所以不,它不会在您的 created_at 字段上创建一个。

    你需要一个吗?仅当您遇到性能问题时(或看到您很快就会遇到问题)。在遇到问题之前,您可以处理的不仅仅是几百行。

    一旦你觉得你需要一个,那么你应该使用 Rails 迁移来添加它 - 你不应该直接将它自己添加到数据库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 2019-11-11
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      相关资源
      最近更新 更多