2011-06-16 49 views
2

我正在使用Ruby on Rails 3.0.7,我想知道使用User.all方法的優點和缺點(與性能有關),然後對結果執行查找程序方法每個請求都需要使用而不是使用User.find(<id>)單獨檢索每條記錄。查找方法檢索數據庫數據的性能

我問這個,因爲我觀點文件我有這樣的事情:

accounts.each { |account| 
    puts account.user.name 
} 

UPDATE

例如,#1網站將如何處理有關取景器標籤方法?

回答

2

請勿取出all任何東西,除非您確定數據集非常小,最多爲幾十條記錄。獲取所有用戶是災難的祕訣,因爲此操作的內存使用量將隨着系統上的用戶數量線性增加。

必須檢索在大多數情況下的子集時使用findwhere方法,除非你可以絕對肯定的參與記錄的數量是微不足道的。

我甚至會主張使用select_valuesselect_rows當你需要的只是一小部分數據而沒有模型的開銷,這對大表列表很有效。

請記住,當你加載一個模型,你加載一切默認情況下與它相關聯。對於用戶來說,這可能包括他們的擴展傳記,他們的地址,他們最喜歡的顏色,他們的電子郵件,他們的密碼,以及所有你使用的是他們的名字,然後把對象扔掉。如果性能是一個問題,只能取得你需要的東西。

幾乎總是錯誤的在你的控制下:

@users = Users.all 

你需要做的是分頁或頁面會得到越來越慢隨着越來越多的用戶在系統上註冊。在某些時候,頁面將永遠不會正確渲染,因爲它會首先超時。

+0

@tadman - 1.000可以是微不足道的? 10.000可以是微不足道的? 100.000可以是微不足道的?只是要知道... – user502052 2011-06-16 21:29:10

+0

平凡通常意味着「幾十個」,但對於真正輕量級的記錄,他們只有幾個簡單的領域,你可能能夠擺脫數百個。較重的物體加起來很快。 – tadman 2011-06-16 21:30:20

+0

@tadman - 因此,在'每個'塊中使用1.000'User.find()'方法是錯誤的? – user502052 2011-06-16 21:34:19