8
Rails:include対:joins
これは、「これを行う方法がわからない」という質問ではなく、「なぜこのように機能するのか」という質問です。 したがって、使用することがわかっている関連レコードをプルするという福音は:include、結合を取得して余分なクエリの全体を回避するために使用することです。 Post.all(:include => :comments) ただし、ログを見ると、結合は行われていません。 Post Load (3.7ms) SELECT * FROM "posts" Comment Load (0.2ms) SELECT "comments.*" FROM "comments" WHERE ("comments".post_id IN (1,2,3,4)) ORDER BY created_at asc) すべてのコメントを一度にプルするのでショートカットを取っていますが、それはまだ結合ではありません(すべてのドキュメントが言っているようです)。結合を取得できる唯一の方法は、次の:joins代わりに使用することです:include。 Post.all(:joins => :comments) そしてログは示しています: Post Load (6.0ms) SELECT "posts".* FROM "posts" INNER JOIN "comments" ON "posts".id = "comments".post_id 何か不足していますか?私は6ダースの関連付けを持つアプリを持っていて、1つの画面にそれらすべてのデータを表示します。6人の個人ではなく、1つの結合クエリを使用する方がよいようです。パフォーマンスに関しては、個々のクエリよりも結合を行う方が常に良いとは限らないことを知っています(実際に時間を費やすと、上記の2つの個々のクエリが結合よりも高速であるように見えます)。私は読んでいますが:include、宣伝どおりに機能していないことに驚いています。 たぶんRails はパフォーマンスの問題を認識していて、特定の場合を除いて参加しませんか?