2010-10-17 60 views
0

表中的列:user_idseason_id
這是更快:Rails /索引性能Q - 哪個更快?

#If I have a database index on user_id 
Table.find_all_by_user_id(some_id) 

#If I have a database index on user_id and season_id 
Table.find_all_by_user_id_and_season_id(some_id, another_id) 

是一個多列索引總是快?
例如,寫多列索引較慢?如果是這樣,我可以使用單列查詢。

PS。該表有大約1,000,000條記錄,並且穩步增長!

回答

0

Table.find_all_by...與索引無關。無論列是外鍵還是編制索引,這些都是通過導軌添加的。如果您希望這些列由數據庫建立索引,則需要在遷移中使用add_index手動添加它們。

你的例子正在做兩件完全不同的事情。一旦發現一列,另一列發現兩列,他們將返回不同的結果。

如果你想知道哪個更快,你將不得不做一些基準測試。我建議閱讀導軌指南。 http://guides.rubyonrails.org/performance_testing.html

1

該索引取決於您需要執行的查詢。 以下代碼

Table.find_all_by_user_id(some_id) 

不添加任何索引。下面確實

add_index :table, :column 

所以,如果你需要執行同時使用user_idseason_id查詢,然後添加一個綜合指數。否則添加一個簡單的索引。

+0

你誤會了我:)看看我的編輯。 – Frexuz 2010-10-17 16:33:59