Một vài thứ nhảy ra.
Thứ nhất, nếu mã này được gọi 2000 lần và mất thêm 250 mili giây để chạy, thì đó là ~ 0,125 mili giây mỗi lần gọi để chuyển Arel sang SQL, điều này không viển vông.
Thứ hai, tôi không chắc về nội bộ của Range trong Ruby, nhưng lower..upper
có thể đang thực hiện các phép tính chẳng hạn như kích thước của phạm vi và những thứ khác, đây sẽ là một tác động lớn về hiệu suất.
Bạn có thấy hiệu suất tương tự như sau không?
sum = Table.
where(:id => id).
where(:created_at => "BETWEEN ? and ?", lower, upper).
sum(:my_column)