【问题标题】:Rails ActiveRecord N+1 ProblemRails ActiveRecord N+1 问题
【发布时间】:2011-09-24 13:43:59
【问题描述】:

我有一个获取以下数据的声明: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 问题,我想我传递了不正确的包含参数来查找方法。谁能帮我优化这个调用?

【问题讨论】:

  • 您需要发布您的实际日志输出。

标签: ruby-on-rails activerecord select-n-plus-1


【解决方案1】:

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

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

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

【讨论】:

  • 你说得对,似乎出了点问题,因为我的代码中到处都有元编程。
猜你喜欢
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
相关资源
最近更新 更多