Ett par saker hoppar ut.
För det första, om den här koden anropas 2000 gånger och tar 250 ms extra att köra, är det ~0,125 ms per anrop för att konvertera Arel till SQL, vilket inte är orealistiskt.
För det andra är jag inte säker på insidan av Range i Ruby, men lower..upper
kanske gör beräkningar som storleken på intervallet och andra saker, vilket kommer att bli en stor prestationssuccé.
Ser du samma prestationsträff med följande?
sum = Table.
where(:id => id).
where(:created_at => "BETWEEN ? and ?", lower, upper).
sum(:my_column)