Ruby on rails Rails 4包含了一个即时加载功能,不会为我保存一个数据库调用
根据第13.1.1段的规定,应按照以下方式进行紧急加载Ruby on rails Rails 4包含了一个即时加载功能,不会为我保存一个数据库调用,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,根据第13.1.1段的规定,应按照以下方式进行紧急加载 Post.includes(:category, :comments) 这正是我正在做的(即使是非常渴望加载) 但我看到了服务器日志: Texto Load (0.6ms) SELECT "textos".* FROM "textos" WHERE "textos"."id" = $1 LIMIT 1 [["id", "19"]] Texto Load (0.9ms) SELECT "textos".* FROM "text
Post.includes(:category, :comments)
这正是我正在做的(即使是非常渴望加载)
但我看到了服务器日志:
Texto Load (0.6ms) SELECT "textos".* FROM "textos" WHERE "textos"."id" = $1 LIMIT 1 [["id", "19"]]
Texto Load (0.9ms) SELECT "textos".* FROM "textos" WHERE "textos"."id" = 19 ORDER BY "textos"."id" ASC LIMIT 1
Usuario Load (0.8ms) SELECT "usuarios".* FROM "usuarios" WHERE "usuarios"."id" IN (12)
Profile Load (0.9ms) SELECT "profiles".* FROM "profiles" WHERE "profiles"."usuario_id" IN (12)
Comment Load (0.8ms) SELECT "comments".* FROM "comments" WHERE "comments"."commentable_type" = 'Texto' AND "comments"."commentable_id" IN (19)
SQL (1.1ms) SELECT "tags".*, "t0"."texto_id" AS ar_association_key_name FROM "tags" INNER JOIN "tags_textos" "t0" ON "tags"."id" = "t0"."tag_id" WHERE "t0"."texto_id" IN (19)
Likes Load (1.2ms) SELECT "likes".* FROM "likes" WHERE "likes"."texto_id" IN (19)
Dislikes Load (1.0ms) SELECT "dislikes".* FROM "dislikes" WHERE "dislikes"."texto_id" IN (19)
SQL (1.3ms) SELECT "text_medals".*, "t0"."texto_id" AS ar_association_key_name FROM "text_medals" INNER JOIN "text_medals_textos" "t0" ON "text_medals"."id" = "t0"."text_medal_id" WHERE "t0"."texto_id" IN (19)
我能看到的唯一内部联接来自联接表,这很有意义
我做错了什么?我很确定这是件蠢事,但我找不到。我将感谢任何洞察力
忍者编辑:
在where之后尝试使用约束会产生明显的差异
Text.where(:id => params[:id]).includes({usuario: :profile }, :comments, :tags, :likes, :dislikes, :text_medals).first
我设法用
eager\u load
而不是includes
解决了这个问题,它按预期工作。当您执行类似于@text.comments.each do | c | put c end
的操作时,不会对注释
、标记
等进行单独查询;这就是真正影响性能的地方。我认为它在一个查询中占用了所有资源,最多两个。
Text.where(:id => params[:id]).includes({usuario: :profile }, :comments, :tags, :likes, :dislikes, :text_medals).first