2010-10-12 190 views
1

執行單個數據庫查詢可以更快速地找到所需的頁面結果,然後通過if/else語句執行多個循環來提取您想要在每個部分中顯示的內容,或者做幾個數據庫查詢來選擇您需要的確切數據,然後分別循環遍歷每一個數據?優化數據庫查詢的使用

例如:

@completed = HostTask.find(:all, :include => [:task], :conditions =>["host_tasks.decommission_id = ? AND host_tasks.completed IS NOT NULL", params[:id]], :order => "tasks.position") 
@incomplete = HostTask.find(:all, :include => [:task], :conditions =>["host_tasks.decommission_id = ? AND host_tasks.completed IS NULL", params[:id]], :order => "tasks.position") 

然後循環通過每個顯示量。或者只是:

@tasks = HostTask.find(:all, :include => [:task], :conditions =>["host_tasks.decommission_id = ?", params[:id]], :order => "tasks.position") 

通過@tasks循環兩次,只顯示@ tasks.completed爲null然後不爲空?

回答

1

多次往返是昂貴的,但選擇超過所需數據的成本也很高。只選擇具有多個db查詢的確切數據,而不嘗試使用複雜的異常業務邏輯,這在大多數情況下是優先選擇的方式,但它取決於使用情況。我建議緩存,緩存和緩存。您可以獲得巨大的性能優勢。

+1

+1與往常一樣,「取決於」。 – 2010-10-13 11:15:56

1

我認爲在數據庫連接中執行單個查詢會比'更快',而且通話費用很高。您是使用應用服務器還是其他連接池?這可能會幫助 取決於您要帶回的數據量。

+0

肯定小於500行 – Rumpleteaser 2010-10-19 03:48:24