郵便番号のnはマイル内のレコードをデータベースに照会するための最良の方法は何ですか?
-
22-08-2019 - |
質問
私は自分のデータベース内のレコードのリストを持っており、各レコードは、郵便番号に関連付けされます。
他の郵便番号のnはマイル以内にあるすべてのエントリを見つけるために私のデータベース内のすべてのレコードを照会するための「ベストプラクティス」とは何ですか?
各郵便番号は、緯度/長いので、私はそれを使用する必要があります知っているデータベースに関連付けられています。しかし、私は、郵便番号の各ペアに距離式の任意の並べ替えを実行しているマイルに変換し、私の半径内でないものを拒否する想像することはできません。
それは、このような一般的なクエリに対してひどく計算コストが高いようです。
私はまた、すべてのペア事前計算を行うと考えられてきたが、また考慮することは大きすぎるようです。米国では約40,000〜郵便番号があります。だから、各郵便番号の全てのペアのデータベース(40,000)^ 2、又は1.6billionエントリになります。
私はこのウェブサイト上の共通の問題である知っているので、うまくいけば、誰かが最善の方法のための正しい方向に私を指すことができます。私が使用しているの SQL Server 2008のを、私は本当にのこの例ではのホイールを再発明したくないので、そこにその後、偉大事前に構築されたソリューションがある場合ます。
<時間>関連質問:は半径内のすべての郵便番号の取得(これは私を助けていない)
また、私はこの SourceForgeののプロジェクトを知っているが、それは遺棄、もはや使用中ではありません。
解決
私は、ラジアル検索円(minlat は、SQLサーバは、空間インデックス。
他のヒント
私は、ユーザーのあたり約1秒に1回、このクエリを実行する必要があるサイトを実行しますそして、ここで私が学んだことです。
まず第一に、あなたの場所のテーブルには緯度と経度のインデックスを持っていることを確認してください。あなたは数百万レコードを持っている場合、それは20msのと15秒の応答時間の差です。
と仕事をする場所のセットを取得するには、バウンディングボックスのクエリをオフに起動します。次に、ソート、それらの距離を計算し、あなたが正確性についてうるさいなら、数をフィルタリングます。
率直に言って、私は事前に計算し何も心配ないでしょう。私が言うように、私は6,000,000エントリを持つロケーション・テーブルに対するクエリのこのタイプを実行し、それは通常、<50ミリ秒で結果を返します。本当にいやしくも十分に速くなるようにすることを、あなたのニーズに応じています。
グッドラック!
これは、実際に解決するために非常に難しい問題です。私はあなたがデータベースを事前に作成することによって、いくつかの不正行為を行うことをお勧めします。クエリが入ってくるときには、その後、あなたが見つける必要がある近のどんな種類のグリッドを作成し、例えば、各方向にすべての10マイルを取り、その格子点との距離をそれぞれのzipのデータベースにエントリを追加し、最初のグリッドポイントの一つにクエリ点を翻訳します。今、あなたは非常に簡単に距離を調べることができます。
このソリューションは、基本的に時間の取引空間を意味するので、あなたはすぐに、非常に大規模なデータベースを得ることができます。良いニュースは、次のとおりです。それは、インデックスに非常に簡単なデータです。
あなたは GeoNames.org を見なければなりません。あなたが探しているもののために自分の Webサービスを照会することができ、またはあなたは、DL可能thierデータベースます。