在Rails 2.3中优化ActiveRecord查询

时间:2012-05-09 00:35:42

标签: ruby-on-rails sqlite activerecord

我正在使用sqlite db执行查询,我从数据库中提取了一个非常大的调用记录数据集。在同一页面上,我想显示呼叫记录中每天的计数细目,因此我对数据库执行了大约30次计数查询。

有没有办法可以过滤我最初检索的集合并在内存集中执行计数,所以我不必运行那些连续查询?我需要这些计数用于图形和显示,但即​​使使用日期索引,运行初始查询加上所有计数查询也需要大约10秒钟。

我基本上要问的是有一种方法可以对返回的记录执行计数或对其执行分析,还是有更智能的方法来缓存这些数据?

    @set = Record.get_records_for_range(date1, date2)
while date1 < date2
    @count = Record.count_records_for_date(date1)
    date1 = date1 + 1
end

基本上就是我正在做的事情。当然有一种更简单,更快捷的方法吗?

1 个答案:

答案 0 :(得分:1)

使用@set.length将使您无需查询数据库即可获取内存集中的计数,因为它是由不活跃的红宝石(例如.count执行)

在这里https://batsov.com/articles/2014/02/17/the-elements-of-style-in-ruby-number-13-length-vs-size-vs-count/

这是该文章的引文

  

length是一种不属于Enumerable的方法,它是具体类(例如String或Array)的一部分,通常在O(1)(恒定)时间内运行。这样就快了,这意味着使用它可能是个好主意。