β

rails高级知识: 解决 n + 1的查询问题。

申思维的站点/Siwei's site 17 阅读

n + 1 问题挺难搞的。  别说新手,很多老手都会被 N  + 1问题困扰。

先说解决办法:  使用 includes, 在 where, 或者 find  等查询之前。

例如:

      @fans = Fan.joins(:sales_checks)
                 .includes([:sales_checks => [{:wins => :award}, :cash_desk]])

如果, fan : sales_checks = 1 : n,

sales_checks : wins = 1 : n   ,    sales_checks : cash_desk = n : 1

wins : award = n : 1

那么,我们在查询fan的时候,要带上  sales_checks, 那么就 Fan.includes(:sales_checks)

也可以写成:  Fan.includes( [:sales_checks])

如果在查询时,要带上 wins, 那么就:   Fan.includes([:sales_checks => [:wins]])

如果再带上 cash_desk的话, 那么就  Fan.includes([:sales_checks => [:wins, :cash_desk])  (注意这里   cash_desk是单数, 因为一个    cash_desk对应多个 sales_checks )

如果要带上  wins的 award的话, 那么就是:

Fan.includes([:sales_checks => [{:wins => :award}]])

作者:申思维的站点/Siwei's site
我是申思维,从事于WEB 和移动app开发 熟悉js (coffeescript), CSS, HTML,跟web相关的服务器(apache, nginx, passenger, mongrel, t
原文地址:rails高级知识: 解决 n + 1的查询问题。, 感谢原作者分享。

发表评论