我一直在阅读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应用程序中索引哪些字段?
答案 0 :(得分:2)
这取决于您的应用程序,您主要索引外键以提高数据库性能。例如,下次您要搜索属于用户的所有微博时,它将使用user_id索引,并且每当您搜索在特定时间之间创建的所有帖子时,我将使用created_at索引。索引基本上可以加快查询速度,您可以根据您将要执行的查询进行索引。
答案 1 :(得分:1)
我会说在任何地方都存在belongs_to
关系,包括连接表,应该有相应的索引。有些人可能称之为过度,但索引关系和非索引关系之间的性能差异是深远的。
因此,如果User
has_many Books
,那么您的迁移应该有相应的行add_index: :books, :user_id
。如果Book
has_many Authors
和Author
还有_ {1}}通过联接表Books
,则BookAuthorings
上应该有两个索引 - 一个涵盖BookAuthoring
,一个涵盖author_id
。
我说,我遇到的一个好的,稳定的90%的Rails性能问题源于某个地方缺少索引。
答案 2 :(得分:0)
我主要索引(正如其他人所说的)外键和我打算用于搜索或排序的所有其他字段。所以在你的情况下,如果你想按字母顺序显示微博,我会至少在标题栏中添加一个键。
如果content
字段可能依赖。如果它包含大量文本,您很可能不会进行简单的排序或搜索,但会想要进行全文搜索。在这种情况下,正常的数据库索引不会有很大的帮助,你必须使用全文搜索引擎。