Optimiser Rails requête de chargement avide de trouver tous les
-
21-09-2019 - |
Question
Dans une application Rails 2.3.5 J'ai quelque chose comme les modèles suivants:
class Foo < ActiveRecord::Base
has_many :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
Et quand je vous appelle
Foo.all(:include => :bars)
Je vois les requêtes suivantes dans la console:
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))
avec tous les ids de Foo dans la clause where.
Je suppose que ce n'est pas une requête optimale alors que le nombre de ids peut être grande, et je dois précharger tous les « barres ». De plus, en fait j'ai pas deux modèles, mais une chaîne d'entre eux.
Y at-il un moyen de faire la requête de chargement désireux être comme
SELECT "bars".* FROM "bars"
lorsque j'utilise trouver tous?
La solution
C'est en fait une optimisation, en fait Rails modifie la stratégie d'interrogation se passe est le nombre de id élevé.
Vous pouvez également utiliser :join
au lieu d'utiliser :include
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow