2013-08-29 65 views
0

這是我如何得到全計數,並@codes對象如何加快少sql?

@codes = user.codes.joins(:community).merge(Community.not_deleted).order("codes.updated_at DESC").limit(10) 
@codes_count = user.codes.joins(:community).merge(Community.not_deleted).order("codes.updated_at DESC").count 

是否有任何技術使這個少SQL查詢?

@codes_all = user.codes.joins(:community).merge(Community.not_deleted).order("codes.updated_at DESC") 

@codes_count = @codes_all.count 
@codes = @codes_all.limit(10) 

,並有可能使這種預先加載這樣的事情?

@codes_all = user.codes.includes(community: [:country, :language]).joins(:community).merge(Community.not_deleted).order("codes.updated_at DESC") 

@codes_count = @codes_all.count 
@codes = @codes_all.limit(10) 

回答

0

這是不是完全清楚您是否試圖使SQL查詢本身更快,或者只是降低複雜性。不管你做什麼,你仍然必須至少做兩個查詢。一個獲得總數,一個獲得10個代碼。這沒有任何辦法。在第二個例子中,它減少了重複的代碼,但它仍然會與第一個例子完全相同的查詢。

在你的第三個例子中,如果你以後真的使用它,我只會推薦加載相關模型。否則,你只會增加不需要的開銷。

如果您嘗試加快速度,請確保您的數據庫索引適用於用於排序或排序的任何列。