我有一个这样的SQLite数据库表
我需要为每个TimeIndex计算ObjectIndex == 1的值除以ObjectIndex == 2的值,例如,对于TimeIndex == 1,100 / 5 = 20
我的代码使用Ruby Sequel,以下是我到目前为止的代码:
array_1 = db[:my_table].where(ObjectIndex: 1).order(:TimeIndex).select_map(:Value)
array_2 = db[:my_table].where(ObjectIndex: 2).order(:TimeIndex).select_map(:Value)
division = array_1.zip(array_2).map { |x, y| y == 0 ? 0 : (x / y).round(2)}
。。。然后在我的ruby代码的其他地方使用除法
目前处理一个ObjectIndex大约需要10秒(如果我先打印出array_1.first,则需要10秒)。表中大约有5813 k行,每个ObjectIndex大约有9000行。这个速度正常吗?或者有什么方法可以减少处理时间?
1条答案
按热度按时间1aaf6o9v1#
目前,您正在运行两个单独的数据库查询,并将结果转换为Ruby对象,然后压缩并Map纯Ruby中的这些对象(不涉及DB)。一般来说,加速DB使用的最简单方法是最小化查询,最小化DB和非DB类型之间的转换,并在DB中进行计算作为查询的一部分。
我不知道使用Sequel gem的漂亮方法,但它可以运行任意查询,所以这可能有效:
如果需要的话,你可以添加更多的列到选择中。