2011-06-20 37 views

回答

7

讓數據庫做它的工作總是最好的。只需使用where子句/ join/etc編寫查詢。並使用排序方式只返回您需要的記錄。通過返回更多記錄,然後在rails中過濾數據會浪費「線」(數據庫和應用程序服務器之間)以及內存中的數據量。數據庫針對這些事情進行了優化。根據需要在表格上使用索引。

另一個類似的帖子:http://www.mail-archive.com/[email protected]/msg13484.html

+0

絕對同意......剛剛發佈後,你... +1 – apneadiving

+0

還要記住,如果結果*所以*很大,就像你得到了一千個結果一樣,你應該限制返回的結果,並且可能根據你的用例對它進行分頁。但絕對讓數據庫做它的工作,沒有一點詮釋拉10,000記錄到Ruby的記憶只顯示其中25。 – nzifnab

2

一個web應用程序的緩慢部分幾乎總是數據庫。

  1. 運行復雜的查詢會花費你一點時間,但提供的數據將是有意義的,不是那麼大。

  2. 運行基本查詢會讓您擁有一個您必須處理的大型數據集。這麼大量的數據可能還需要很長時間才能導入。

我會堅持1知道你可以優化查詢和添加索引。

1

幾乎總是應該使用SQL來過濾結果集。數據庫更加依賴於性能,並且在代碼中進行排序通常會導致N + x查詢,從而導致性能下降。

可能做這樣的事情,你需要什麼可能是像這樣的取景器:

Article.where('id in (
       SELECT article_id 
       FROM comments 
       WHERE approved = ? AND public = ? 
       ORDER BY count(article_id) DESC 
       LIMIT 10 
      )', true, true) 
相關問題