Jak poprawnie zaimplementować top10

Hej,

Mam powiedzmy takie modele

[code=ruby]class Venue
has_many :reservations
end

class Reservation
belongs_to :venue
end[/code]
Reservation ma pole odpowiedzialne za ocenę rezerwacji (taka opinia). Można punktować od 1 do 5 (integer).

Jak na podstawie czegoś takie wyliczyć top10 mając bardzo dużo rekordów w bazie danych?

Skorzystać z funkcji SQLowych (COUNT) i naklepać procedury (do zliczania średniej oceny dla poszczególnego Venue)?

Czy też może napisać coś takiego w ActiveRecordzie albo innym ORMie?

Druga sprawa to czy taki COUNT itp się opłaca jeśli mamy dużo rekordów w bazie (z tego co mi się obiło w uszach to zapytania się nie keszują, jeśli korzystają z funkcji SQLowych). Może po prostu wrzucać ‘średnią ocenę’ do Venue(raz na jakiś czas) i na podstawie tego robić jedno zapytanie?

Dokładnie tak.