1

latitude格納する列と座標を含むデータベース テーブルがありますlongitude(どちらもdecimalデータ型です)。テーブルには、検索が行われるまでに約 50 万行あります。

問題は、半径 100 ~ 200 マイルの行を検索すると、検索に約 140 秒かかり、本番環境に置くことができないことです。

スタック:

  1. レール4
  2. MySQL 5.5
  3. Geokit-rails gem

地理データによる検索を高速化する方法について、助けを求めたいと思います。kayak.comに似た検索を実装する必要があります。ユーザーにいくつかの結果が表示され、検索はまだバックグラウンドで実行されていますか?

前もって感謝します。

編集:「ストア」スキーム

  create_table "stores", force: true do |t|
    t.string   "store_name"
    t.string   "address"
    t.string   "city"
    t.string   "state"
    t.string   "county"
    t.string   "zip_code"
    t.decimal  "latitude",                    precision: 10, scale: 6
    t.decimal  "longitude",                   precision: 10, scale: 6
  end

テーブルにインデックスはありません。latitudeデータベースにも列を持つ同様のテーブルがあり、longitudeそれらにインデックスを追加しようとしましたが、検索の読み込み時間は変わりませんでした。

4

3 に答える 3

1

次のように、経度と緯度の列に複合インデックスを配置することから始めます。

class AddIndexToStoresLongitudeLatitude < ActiveRecord::Migration
  def up
    add_index :stores, [:latitude, :longitude]
  end

  def down
    remove_index :stores, [:latitude, :longitude]
  end
end
于 2014-11-18T11:02:53.980 に答える
0

@pickermann の回答が機能しない場合、IMO は Postgres に移行する必要があります。PostGis は、優れたパフォーマンスを備えた非常に強力なツールです。http://postgis.net/

于 2014-11-18T11:27:28.373 に答える