0

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')

=> 2 つのタイムスタンプ間のすべての速度情報を取得します

リクエストが非常に遅かったため、Speed テーブルに 2 つのインデックスを追加しました。

  • gps_id 列の 1 つのインデックス
  • タイムスタンプ列の 1 つのインデックス

これが最初の基本的なアプローチだと思いますが、これをどのように最適化できますか?

4

1 に答える 1

2

gps_id とタイムスタンプに複数列のインデックスを追加できます。それは物事を改善するかもしれません。ただし、データをクエリするよりも頻繁にデータを挿入すると、他の場所に悪影響を与える可能性があります。

于 2012-07-25T09:55:06.500 に答える