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

moyuanming · October 22, 2014 · Last by moyuanming replied at October 24, 2014 · 1854 hits

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)

You need to Sign in before reply, if you don't have an account, please Sign up first.