0

私たちのビジネス ユーザーは、検索が距離で行われることを好みます。問題は、緯度/経度の場所を含む 100 万件を超えるレコードがあることです。SQL 2008 を使用していますが、距離によって検索を順序付けまたは制限すると、クエリに時間がかかりすぎる (30 秒以上) 問題が発生し続けます。これは容認できません。これを行うためのより良い方法が必要です。SQL 2008 でできることはすべて行っており、可能であれば、ある時点で 2012 にアップグレードしたいと考えています。

ただし、適用できる別のテクノロジーまたは最適化があるかどうかを尋ねます。より高速なパフォーマンス、適用する別の検索アルゴリズム、推定アルゴリズム、ツリー、グリッド、事前計算などのために別の DB に切り替えることはできますか?

4

1 に答える 1

0

ここで役立つ解決策は、検索を 2 つの部分に分割することです。

1) 場所の現在の緯度/経度の特定の値 + または - 内にあるすべてのレコードを検索するクエリを実行します。where 句は次のようになります。

どこで (@latitude > (lat - .001) and @latitude > (lat - .001)) and (@longitude> (lng- .001) and @longitude> (longitude- .001))

このアプローチを使用すると、特に緯度と経度の両方の列にインデックスを使用して、指定された距離内の場所の作業セットを非常に迅速に定義できます。

2) ステップ 1 からの大まかな結果を使用して、大円/haversine 法を使用して、ソースの場所と各ポイントの間の実際の距離を決定します。

このアプローチが失敗するのは、検索する半径に制限がない場合ですが、たとえば、特定のポイントから特定の距離内にあるすべての場所を探している場合にはうまく機能します。

于 2012-04-24T03:05:54.633 に答える