11 Stimmen

Rails SQL COUNT N+1 Ineffizienz

Ich habe einen Blog. Auf meiner Index-Seite werden alle Blog-Einträge angezeigt. Für jeden Blogbeitrag zähle ich die Anzahl der Kommentare zu diesem Beitrag. Dies führt zu einem N+1-Problem. Meine Abfragen sehen wie folgt aus:

SELECT "blog_posts".* FROM "blog_posts" WHERE ("blog_posts"."published" = 't') ORDER BY published_at DESC
SELECT "users".* FROM "users" WHERE ("users"."id" IN (1, 2, 3)) 
SELECT COUNT(*) FROM "blog_comments" WHERE ("blog_comments".blog_post_id = 10)
SELECT COUNT(*) FROM "blog_comments" WHERE ("blog_comments".blog_post_id = 9)
SELECT COUNT(*) FROM "blog_comments" WHERE ("blog_comments".blog_post_id = 8)
SELECT COUNT(*) FROM "blog_comments" WHERE ("blog_comments".blog_post_id = 2)
SELECT COUNT(*) FROM "blog_comments" WHERE ("blog_comments".blog_post_id = 7) 

Gibt es eine Möglichkeit in Rails, die COUNT in der gleichen Weise, die ich die Benutzer (SQL-Zeile 2) einschließen?

0voto

Paul Keen Punkte 1323

Im Folgenden wird Schritt für Schritt erklärt, wie man verschachtelte N+1 bereinigt und diese sauber macht: Wie Sie N + 1 vermeiden und Ihren Ruby on Rails-Controller sauber halten

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X