Optimieren
-
21-09-2019 - |
Frage
In einer Rails 2.3.5 -Anwendung habe ich so etwas wie die folgenden Modelle:
class Foo < ActiveRecord::Base
has_many :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
Und wenn ich anrufe
Foo.all(:include => :bars)
Ich sehe die folgenden Fragen in der Konsole:
SELECT * FROM "foos"
SELECT "bars".* FROM "bars" WHERE ("bars".foo_id IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21))
Mit allen IDs des Foos in der Where -Klausel.
Ich denke, dies ist keine optimale Abfrage, während die Anzahl der IDs möglicherweise groß ist, und ich muss alle "Balken" vorladen. Außerdem habe ich nicht zwei Modelle, sondern eine Kette von ihnen.
Gibt es eine Möglichkeit, die eifrige Ladeanfrage so zu gestalten
SELECT "bars".* FROM "bars"
Wenn ich alles finde?
Lösung
Das ist tatsächlich eine Optimierung, in der Tat ändert Rails die Abfragestrategie, wenn die Anzahl der IDs hoch ist.
Sie könnten auch verwenden :join
anstatt zu verwenden :include
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow