【问题标题】:How can my indexes be optimized?如何优化我的索引?
【发布时间】:2012-07-23 17:28:51
【问题描述】:

我有一个与 Oracle 对话的 Rails 应用程序。
平均而言,我的请求完成时间如下:(从 rails production.log 中提取)

Completed 200 OK in 85ms (Views: 8.4ms | ActiveRecord: 17.1ms)

基本上,我有一个速度表:

  • gps_id
  • 速度
  • 时间戳

=> 它在给定时间戳存储给定 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')

=> 它检索两个时间戳之间的所有速度信息

由于请求真的很慢,我在 Speed 表上添加了 2 个索引:

  • gps_id 列上的一个索引
  • 时间戳列上的一个索引

我想这是第一种基本方法,但是如何优化呢?

【问题讨论】:

    标签: ruby-on-rails database ruby-on-rails-3 activerecord indexing


    【解决方案1】:

    您可以在 gps_id 和时间戳上添加多列索引。这可能会改善事情。但是,如果您插入数据的频率高于查询数据的频率,则可能会在其他地方产生负面影响。

    【讨论】:

    • 我也经常插入数据。最重要的部分(我真正需要优化的部分)是阅读部分。
    • 我建议试一试,看看它是否有所改善。如果没有,请再次将其取下:)
    • 我已经对其进行了测试,但没有注意到多列索引和每列索引之间的任何实际变化。在执行此数据库调用的控制器中,没有循环或实际的东西会导致性能不佳。
    猜你喜欢
    • 2015-07-05
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多