我有一个与Oracle通信的rails应用程序 平均而言,我的请求具有以下完成时间:(从rails production.log中提取)
Completed 200 OK in 85ms (Views: 8.4ms | ActiveRecord: 17.1ms)
基本上,我有一张Speed表:
=>它在给定的时间戳记存储给定gps设备的速度。
我的ActiveRecord请求类似于:
from = DateTime.strptime(params[:from], "%Y-%m-%dT%H:%M:%S%Z")
to = DateTime.strptime(params[:to], "%Y-%m-%dT%H:%M:%S%Z")
@speeds = Speed.where('gps_id = ? and timestamp >= ? and timestamp <= ?', gps.id, from, to).order('id desc')
=&GT;它检索2个时间戳之间的所有速度信息
由于请求非常慢,我在Speed表上添加了2个索引:
我想这是第一种基本方法,但如何优化呢?
答案 0 :(得分:2)
您可以在gps_id和timestamp上添加多列索引。这可能会改善一些事情但是,如果您插入数据的频率高于查询数据,则可能会在其他地方产生负面影响。