1

アプリで gem geokit レールを使用しています。さまざまなアドレスを含むテーブルがあります。原点からの距離順に並べられたレコードを検索するジオキット機能 by_distance を使用しようとしています。

だから私は現時点でこれをやっています。

@close = Mytable.by_distance(:origin => "12 wall street, NY")

したがって、ここで何が起こるかというと、MyTable のすべての ID が順に @close に格納されます。これは、最も近い ID が配列の最初の要素であることを意味します。

実際には、Mytable から最も近い 2 つのアドレスだけが必要です。だから私はそれを行う方法を疑問に思っていましたか?私の現在のコードは、テーブル内のすべての最も近い住所のリストを順番に提供しているためです。最寄りの 2 つのストップだけが必要なため、パフォーマンスが低下することは望ましくありません。

これを達成する方法を提案してください。

4

1 に答える 1

1

これを試してください:

@close = Mytable.by_distance(:origin => "12 wall street, NY").limit(2)

by_distanceクエリはすでに可能な限り最適化されていることに注意してください。クエリに alimitを追加しても、パフォーマンスの面で極端なことはありませんが、アプリケーションの速度が低下することもありません。

いつものように、コンソールでテストして、結果の SQL ステートメントがどのように表示されるかを確認し、奇妙なことが起こっていないことを確認します。念のために、2 つを互いにプロファイルすることもできます。

于 2015-05-02T05:34:32.473 に答える