减少数据库查询

时间:2013-02-24 13:36:39

标签: ruby-on-rails postgresql activerecord

我正在尝试减少数据库的负载,并且已经读过使用:include方法可以帮助解决这个问题。 我目前有以下代码行允许我选择我需要的所有信息,但是当我尝试在我的视图中使用计数渲染时,我一遍又一遍地访问数据库

@sports = Sport.includes([:teams]).all

在我看来我正在做

- @sports.each do |sport|
  %tr
    %td= sport.name
    %td= sport.teams.count

我怀疑sport.teams.count是导致数据库一遍又一遍地被查询的原因。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您应该使用counter_cache。另请参阅此screencast

答案 1 :(得分:1)

正如mischa所说,你可以使用counter_cache来解决你的问题。但您也可以查看此sql语句以获取计数

@sports = Sport.select('sports.*, (SELECT COUNT(*) FROM teams WHERE teams.sport_id = sports.id) AS teams_count')

然后您可以使用sport.teams_count

- @sports.each do |sport|
  %tr
    %td= sport.name
    %td= sport.teams_count