我收到了一份关于获取以下数据的声明:食品名称,食品名称,食品名称和食品类别。并且所有四个字段都在不同的表中。我正在使用这样的声明
@food_servings = FoodServing.find(params[:food_serving_id],
:include => {:food => [:food_brand,:food_category] })
以下是我的模特
FoodServing belongs_to Food
Food belongs_to FoodCategory
Food belongs to FoodBrand
当我执行上面的语句时,我可以在日志中看到很多SQL语句正在执行,显然这是N + 1问题,我想我传递的是不正确的include参数来查找方法。任何人都可以帮我优化这个电话吗?
答案 0 :(得分:1)
我现在一直在使用Rails 3,但我很确定这是在Rails 2中解决AR的N + 1查询问题的正确方法。
现在,如果您为不同的FoodServing记录运行整行100x,您仍然会看到大量的db命中,因为优化仅适用于每个FoodServing.find调用,而不是所有这些调用。< / p>
我想在这一点上我们需要更多日志信息。哪些记录的加载频率超出预期?