Rails 不明白 SQL 怎么会一条一条执行

moyuanming · 2014年10月22日 · 最后由 moyuanming 回复于 2014年10月24日 · 1858 次阅读

View : <% @tollprojects.each do |tollproject| %>

…… SQL : CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" WHERE "tollprojects"."tollproject_id" = 1 LIMIT 1 CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" WHERE "tollprojects"."tollproject_id" = 2 LIMIT 1 CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" WHERE "tollprojects"."id" = $1 LIMIT 1 [["id", 1]] CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" WHERE "tollprojects"."tollproject_id" = 3 LIMIT 1 CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" WHERE "tollprojects"."id" = $1 LIMIT 1 [["id", 1]] CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" WHERE "tollprojects"."tollproject_id" = 4 LIMIT 1 CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" WHERE "tollprojects"."id" = $1 LIMIT 1 [["id", 1]] CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" WHERE "tollprojects"."tollproject_id" = 5 LIMIT 1 CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" WHERE "tollprojects"."id" = $1 LIMIT 1 [["id", 1]] CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" WHERE "tollprojects"."tollproject_id" = 6 LIMIT 1 CACHE (0.0ms) SELECT "tollprojects".* FROM "tollprojects" WHERE "tollprojects"."tollproject_id" = 7 LIMIT 1

数据多就很慢,不太明白为何要 一条记录对应一个查询。 是否有其他处理的办法?

这个是 n+1 吧……

cache 了吧。

刚接触 才知道还有 N+1 问题 谢谢楼上各位!

现在这种情况该如何做: C belongs_to B B belongs_to A

取 B 的 可以 用 A.includes(:B) 要是再取 C 的该如何做呢?

A.includes(:B => :C)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号