Je suis relativement nouveau chez RoR. Dans mon contrôleur, je répète chaque tuple dans la base de données. Pour chaque table, pour chaque colonne que j'appelaisRuby on Rails: Model.all.each vs find_by_sql ("SELECT * FROM modèle"). Chaque?
SomeOtherModel.find_by_sql("SELECT column FROM model").each {|x| #etc }
qui fonctionnait assez bien. Quand je plus tard changé cela
Model.all(:select => "column").each {|x| #etc }
la boucle commence à peu près la même vitesse, mais ralentit rapidement à quelque chose comme 100 fois plus lent que la la commande find_by_sql. Ces appels devraient être identiques, donc je ne sais vraiment pas ce qui se passe.
Je sais que ces appels ne sont pas les plus efficaces mais ce n'est qu'une étape intermédiaire et je l'optimiserai plus une fois que cela fonctionnera correctement. Donc, pour clarifier: Pourquoi, dans le monde, appeler Model.all.each fonctionne-t-il beaucoup plus lentement que l'utilisation de find_by_sql.each?
Merci!
'all' est un alias pour' find (: all) 'qui appelle finalement' find_by_sql' qui est précisément la raison pour laquelle je ne comprends pas le ralentissement . Comme je l'ai dit, je sais que ce n'est pas l'appel le plus efficace, mais si cela ne fonctionne pas, des appels plus efficaces ne fonctionneront pas non plus. Je ne peux pas appeler 'find_in_batches' (ou plus justement,' find_each') à cause de la structure de ma base de données, mais c'est à côté du point. Merci d'avoir répondu. –