我正在寫一個軌道查找器查詢,爲每篇文章的最高數字批准和公開評論排序的文章提取記錄。您是否贊成在Rails應用上使用ruby進行內存過濾或對大量記錄使用SQL查詢?
在Ruby on Rails中運行這樣的查詢的最佳方式是哪種?
作爲一般規則,開發人員是否贊成在內存中過濾或運行復雜的SQL查詢?
我正在寫一個軌道查找器查詢,爲每篇文章的最高數字批准和公開評論排序的文章提取記錄。您是否贊成在Rails應用上使用ruby進行內存過濾或對大量記錄使用SQL查詢?
在Ruby on Rails中運行這樣的查詢的最佳方式是哪種?
作爲一般規則,開發人員是否贊成在內存中過濾或運行復雜的SQL查詢?
讓數據庫做它的工作總是最好的。只需使用where子句/ join/etc編寫查詢。並使用排序方式只返回您需要的記錄。通過返回更多記錄,然後在rails中過濾數據會浪費「線」(數據庫和應用程序服務器之間)以及內存中的數據量。數據庫針對這些事情進行了優化。根據需要在表格上使用索引。
另一個類似的帖子:http://www.mail-archive.com/[email protected]/msg13484.html
一個web應用程序的緩慢部分幾乎總是數據庫。
運行復雜的查詢會花費你一點時間,但提供的數據將是有意義的,不是那麼大。
運行基本查詢會讓您擁有一個您必須處理的大型數據集。這麼大量的數據可能還需要很長時間才能導入。
我會堅持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)
絕對同意......剛剛發佈後,你... +1 – apneadiving
還要記住,如果結果*所以*很大,就像你得到了一千個結果一樣,你應該限制返回的結果,並且可能根據你的用例對它進行分頁。但絕對讓數據庫做它的工作,沒有一點詮釋拉10,000記錄到Ruby的記憶只顯示其中25。 – nzifnab