witam
mam table questions gdzie jest kilkadziesiąt pytań i answers gdzie jest kolo 200k rekordów. Kazde pole w answers ma response_id (responses to inna tabela) oraz question id. Chciałbym dostac ilosc odpowiedzi dla danego response id. Mam taką funkcje w modelu Question
def responses_count
answers.count(:response_id, :distinct => true)
end
co dla kazdego pytania daje sqla
Nie wiem czy jest to optymalne rozwiazanie, czy nie lepiej dodac kolumne respones_count
ps: Czy ruby nie zwalnia pamieci raz zajętej przez wynik zapytania ? z tego co zauwazyłem jesli zuzycie pamieci dla danej podstrony mi wzrosnie, to potem juz nie spada, to akurat na Webricku na localu, nie wiem jak na serwerze.
Nie jest optymalne. Lepiej dodać kolumnę. Railsy nawet potrafią to obsłużyć z automatu, poszukaj opcji counter_cache w dokumentacji ActiveRecord::Associations::ClassMethods
znalazłem powód wycieków pamieci aplikacje robiłem chwile temu gdy uczyłem się railsów, dawałem @duzo_rekordow.length zamiast .count, w tym pierwszym wypadku zwraca całą kolekcje obiektów i liczy jej rozmiar, w 2gim liczeniem zajmuje sie baza.
Najbezpieczniej chyba korzystac z .size. Jezeli nie korzystasz z counter cache to nie ma roznicy miedzy .size a .count, przy uzywaniu counter cache .size bedzie pobierac wartosc z cache natomiast .count zawsze wykona COUNT na bazie. Poprawcie mnie jezeli sie myle.