いくつかのことが飛び出します。
まず、このコードが2000回呼び出され、実行に250ミリ秒余分にかかる場合、ArelをSQLに変換するのに1回の呼び出しあたり約0.125ミリ秒かかりますが、これは非現実的ではありません。
次に、RubyのRangeの内部はわかりませんが、lower..upper
範囲のサイズなどの計算を行っている可能性があり、これはパフォーマンスに大きな打撃を与えます。
次の場合と同じパフォーマンスヒットが見られますか?
sum = Table.
where(:id => id).
where(:created_at => "BETWEEN ? and ?", lower, upper).
sum(:my_column)