Ottimizzare Rails interrogazione eager loading per trovare tutte
-
21-09-2019 - |
Domanda
In un'applicazione Rails 2.3.5 Ho qualcosa come i seguenti modelli:
class Foo < ActiveRecord::Base
has_many :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
E quando sto chiamando
Foo.all(:include => :bars)
Vedo le seguenti query nella 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))
con tutti gli ID del foo nella clausola WHERE.
Credo che questo non è una query ottimale, mentre il numero di ID può essere grande, e ho bisogno di precaricare tutti i 'bar'. Inoltre, in realtà ho non due modelli, ma una catena di loro.
C'è un modo per rendere la query eager loading essere come
SELECT "bars".* FROM "bars"
quando sto usando trovare tutte?
Soluzione
Che in realtà è un'ottimizzazione, in Rails infatti cambia la strategia di interrogazione se il numero di id va alto.
Si potrebbe anche usare :join
invece di usare :include
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow