我应该在Rails应用程序中索引哪些字段?

时间:2012-01-27 06:29:59

标签: ruby-on-rails

我一直在阅读Rails中的add_index方法。

在教程中,我找到了这个例子:

class AddTitleToMicroposts < ActiveRecord::Migration
  def change
    create_table :microposts do |t|
      t.string :title
      t.string :content
      t.integer :user_id

      t.timestamps
    end
    add_index :microposts, [:user_id, :created_at]
  end
end 

我不知道为什么[:user_id, :created_at]被编入索引,而不是其他人。

如何知道要在Rails应用程序中索引哪些字段?

3 个答案:

答案 0 :(得分:2)

这取决于您的应用程序,您主要索引外键以提高数据库性能。例如,下次您要搜索属于用户的所有微博时,它将使用user_id索引,并且每当您搜索在特定时间之间创建的所有帖子时,我将使用created_at索引。索引基本上可以加快查询速度,您可以根据您将要执行的查询进行索引。

答案 1 :(得分:1)

我会说在任何地方都存在belongs_to关系,包括连接表,应该有相应的索引。有些人可能称之为过度,但索引关系和非索引关系之间的性能差异是深远的。

因此,如果User has_many Books,那么您的迁移应该有相应的行add_index: :books, :user_id。如果Book has_many AuthorsAuthor还有_ {1}}通过联接表Books,则BookAuthorings上应该有两个索引 - 一个涵盖BookAuthoring,一个涵盖author_id

我说,我遇到的一个好的,稳定的90%的Rails性能问题源于某个地方缺少索引。

答案 2 :(得分:0)

我主要索引(正如其他人所说的)外键和我打算用于搜索或排序的所有其他字段。所以在你的情况下,如果你想按字母顺序显示微博,我会至少在标题栏中添加一个键。

如果content字段可能依赖。如果它包含大量文本,您很可能不会进行简单的排序或搜索,但会想要进行全文搜索。在这种情况下,正常的数据库索引不会有很大的帮助,你必须使用全文搜索引擎。