需要帮助优化此数据库查询

时间:2010-01-23 20:19:46

标签: ruby-on-rails optimization activerecord

我希望能为rails网站优化此查询提供一些帮助:

Vacation
has_many :departures
has_many :photos

Departure
belongs_to :vacation

Photo
belongs_to :vacation

我需要找到一份按出发顺序排列并显示的假期列表。因此,如果假期有两次离开,它应该在列表中显示两次(每次出发一次)。

@dates = Departure.find(:all, 
                        :order => "start_at", 
                        :include => [{:vacation => :photos}],
                        :conditions => ["vacations.duration > 1 AND start_at > ?", Time.now])

问题在于,我需要收集每个假期的所有未来离职,这会导致每个出发的新查询。

关于如何更好地实现这一目标的任何想法?

2 个答案:

答案 0 :(得分:0)

您对该查询没有限制,那么您是否已经将所需内容拉入内存?您有一个数组,每个未来的出发时间都适合您想要展示。

所以使用你已有的数组。

vacation_id = 3 # Or whatever - this would obviously be in a loop.
@dates_for_vacation = @dates.select{|d| d.vacation_id == vacation_id}

答案 1 :(得分:0)

我认为您可以通过度假时的查询来提取数据,而不是离开。

@vacations = Vacation.find(:all, 
                    :order => "departures.start_at", 
                    :include => [:departure, :photos],
                    :conditions => ["vacations.duration > 1 AND departures.start_at > ?", Time.now])

这将找到该时间段的所有假期,但也会加载相关的出发和照片记录,从而大大减少了查询负担。

您可能需要使用查询来获取正确的离境记录。