weixin_39758618 2020-11-22 01:58
浏览 0

Strategic Eager Loading issue (N+1)

Assuming a model:


class Manufacturer
  include DataMapper::Resource

  property :id, Serial

  belongs_to :category
...
end

class Category
  include DataMapper::Resource

  property :id, Serial
  property :code, String
end

Let's run a query which should perform one request:


Manufacturer.all.map do |m|
  {
    :id => m.id,
    :category => m.category.nil? ? nil : m.category.code,
  }
end

results in multiple fetching of Category:


SELECT "categories"."id", "categories"."code" FROM "categories" INNER JOIN "manufacturer_categories" ON "categories"."id" = "manufacturer_categories"."category_id" INNER JOIN "manufacturers" ON "manufacturer_categories"."manufacturer_id" = "manufacturers"."id" WHERE "manufacturer_categories"."manufacturer_id" = 29481 GROUP BY "categories"."id", "categories"."code" ORDER BY "categories"."id"

该提问来源于开源项目:datamapper/dm-core

  • 写回答

5条回答 默认 最新

  • weixin_39758618 2020-11-22 01:58
    关注

    Can even be reproduced with:

    
    Manufacturer.all.map do |m| m.category.code end
    
    评论

报告相同问题?