0

我正在使用 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

基本上就是我正在做的事情。肯定有更简单、更快捷的方法吗?

4

1 回答 1

1

使用@set.length将在不查询数据库的情况下为您提供内存集的计数,因为它是由 ruby​​ 非活动记录执行的(就像.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)(常数)时间内运行。这是最快的,这意味着使用它可能是一个好主意。

于 2018-12-12T15:26:22.377 回答