2012-01-27 57 views
2

我一直在阅读关于Rails中的add_index方法。我应该在Rails应用程序中索引哪些字段?

在教程中,我发现这个例子:

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应用程序中编入索引?

回答

2

那么这取决于你的应用程序,你主要通过索引外键来提高数据库性能。例如,下次您要搜索属于某个用户的所有微博时,它将使用user_id索引,并且无论何时搜索在特定时间之间创建的所有博文,我都将使用created_at索引。索引基本上可以加快查询速度,您可以根据您经常进行的查询来进行索引。

+0

对不起,有简单的英语**外键**? – alexchenco 2012-01-27 06:34:12

+0

外键是在表外引用表的键。 – 2012-01-27 06:35:41

+1

它们是数据库用于维护关系的字段。 user_id是一个外键,因为它是将micropost与用户关联的字段。如果你愿意,这个字段本身就像一个指针,它指向另一个表。 – daniel 2012-01-27 06:37:39

1

我会说到处都有一个belongs_to的关系,包括连接表,应该有一个对应的索引。有些人可能会称之为“过度”,但索引关系和非索引关系之间的性能差异非常深远。

因此,如果User has_many Books,那么你的迁移应该有一个对应的行add_index: :books, :user_id。如果Book has_many AuthorsAuthor也通过连接表BookAuthorings has_many Books,那么BookAuthoring应该有两个索引 - 一个覆盖author_id,一个覆盖book_id

我想说的是,我遇到的Rails性能问题的一个很好的,稳定的90%来自于某处丢失索引。

0

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

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

相关问题