1

我有一个获取以下数据的声明:food-serving-name、food-name、food-brand-name 和 food-category。并且所有四个字段都在不同的表中。我正在使用这样的声明

@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 问题,我想我传递了不正确的包含参数来查找方法。谁能帮我优化这个电话?

4

1 回答 1

1

我已经专门使用 Rails 3 有一段时间了,但我很确定这是在 Rails 2 中解决 AR 的 N+1 查询问题的正确方法。

现在,如果您为不同的 FoodServing 记录运行整行 100 倍,您仍然会看到大量的数据库命中,因为优化仅适用于每个 FoodServing.find 调用,而不是所有调用。

我想说此时我们需要从您的日志中获取更多信息。哪些记录的加载频率超出了您的预期?

于 2011-06-28T20:18:32.770 回答