2012-01-27 86 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字段,它可能取決於。如果它包含大量文本,則很可能不會進行簡單的排序或搜索,但會想要進行全文搜索。在這種情況下,正常的數據庫索引不會有很大的幫助,您將不得不使用全文搜索引擎。

相關問題