Come posso ottimizzare i miei query SQL, di ignorare situazioni come questa:counter_cache ottimizzazione has_many_through SQL, ridurre il numero di query SQL
Meeting.find (5) .users.size => SELECT COUNT (*) dA DOVE ... ...
User.find (123) .meetings.size => SELECT COUNT (*) FROM ... Dove ...
non ho idea di come utilizzare counter_cache qui.
Ecco il mio modello di relazione:
class Meeting < ActiveRecord::Base
has_many :meeting_users
has_many :users, :through => meeting_users
end
class User < ActiveRecord::Base
has_many :meeting_users
has_many :meetings, :through => meeting_users
end
class Meeting_user < ActiveRecord::Base
belongs_to :meeting
belongs_to :user
end
Quali sono le soluzioni più ottimali?
E come implementare counter_cache qui?
Qualsiasi cosa qui ti impedisce di fare qualcosa come MeetingUser.where (: meeting_id => 5,: user_id => 123) .size per entrambe le situazioni? Almeno in tal caso si sarebbe in grado di sfruttare la memorizzazione nella cache SQL query. L'implementazione predefinita di counter_cache non ti aiuterà veramente in questo tipo di situazione. – jmcnevin
Penso che tu abbia torto. counter_cache aiuterà qui. Ad esempio, quando si esegue il rendering di un elenco di utenti nella vista e in ciascuna riga viene visualizzato il numero di riunioni di ciascun utente? Con counter_cache questa sarà una query SQL, senza che sia 1 + n * Users.size – astropanic