我在我的數據庫中有三個表:值,鍵和來源。密鑰和來源都有很多值。源有一個名爲file_date的日期時間列。對於每個鍵,我必須選擇具有特定日期範圍(通常在兩年內)之間來源的所有值。並非該範圍內的所有日期都有來源,並非所有來源都有價值。我需要創建一個包含該範圍內所有值的數組。如何加快這些ActiveRecord查詢?
我在第一次試圖簡單地查詢整個源陣列一次,像這樣:
Value.where(key: 1, source: sources_array)
然而,因爲有幾個值是零,它只是返回的記錄,在該日有一個值。
所以,現在我創建了一個包含該日期範圍之間所有源的數組。沒有信息來源的日子只有零。然後,對於每個鍵,我遍歷sources數組,返回與foo和source匹配的值。這顯然不理想,頁面加載大約需要7秒。
這裏是代碼:
sources.map do |source|
Value.where(source: source, key: key)
end
任何想法?
我得到了這個錯誤:'ActiveRecord :: StatementInvalid:PG :: SyntaxError:ERROR:內存耗盡在或接近「源」' – NJP 2014-11-20 20:11:45
您可以嘗試更改「union」爲「union all」,引用此SE問題: http://dba.stackexchange.com/questions/42852/postgres-9-2-select-multiple-specific-rows-in-one-query 這似乎是在PostgreSQL中組合多個select查詢的常用方法。 – Ravenstine 2014-11-20 20:26:30