2010-10-12 72 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