Rails - 如何最小化这些查询?

时间:2011-04-10 11:25:27

标签: mysql ruby-on-rails optimization

我需要在视图中最小化数据库查询。首先让我们看看我的设置:(最后的问题)

我的模特:

- User has_many Followings
- Following belongs_to Show/User
- Show has_many Episodes

FollowingsController:

Following.find(:all, :conditions => { :user_id => current_user.id }, :include => [:show], :order => "shows.name")

显示模型:

def prev_episode()
    Episode.find(:first, :conditions => ["show_id = ? AND air_date < ?", self.id, Date.today], :order => "air_date desc, number desc")
end

def next_episode()
    Episode.find(:first, :conditions => ["show_id = ? AND air_date >= ?", self.id, Date.today], :order => "air_date asc, number asc")
end

我的观点(简化):

  <% @followings.each do |following| %>
  <tr>
    <td><%= link_to "#{following.show.name}", show_path(:permalink => following.show.permalink) %></strong></td>
    <td><%= following.show.prev_episode # UNWANTED QUERY %></td>
    <td><%= following.show.next_episode # UNWANTED QUERY %></td>
  </tr>
  <% end %>

每次请求都会产生糟糕的查询次数 此视图最多可包含100行,超过200个请求! 我真的需要尽量减少这个。有什么想法吗?

PS。如有必要,我可以使用memcached。

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是让每集都有前一集和后续剧集作为外键链接,这将保存日期搜索。这种方法的缺点是你需要在添加剧集时链接剧集,但是没有免费的午餐......