郵便番号のnはマイル内のレコードをデータベースに照会するための最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/527512

質問

私は自分のデータベース内のレコードのリストを持っており、各レコードは、郵便番号に関連付けされます。

他の郵便番号のnはマイル以内にあるすべてのエントリを見つけるために私のデータベース内のすべてのレコードを照会するための「ベストプラクティス」とは何ですか?

各郵便番号は、緯度/長いので、私はそれを使用する必要があります知っているデータベースに関連付けられています。しかし、私は、郵便番号の各ペアに距離式の任意の並べ替えを実行しているマイルに変換し、私の半径内でないものを拒否する想像することはできません。

それは、このような一般的なクエリに対してひどく計算コストが高いようです。

私はまた、すべてのペア事前計算を行うと考えられてきたが、また考慮することは大きすぎるようです。米国では約40,000〜郵便番号があります。だから、各郵便番号の全てのペアのデータベース(40,000)^ 2、又は1.6billionエントリになります。

私はこのウェブサイト上の共通の問題である知っているので、うまくいけば、誰かが最善の方法のための正しい方向に私を指すことができます。私が使用しているの SQL Server 2008のを、私は本当にのこの例ではのホイールを再発明したくないので、そこにその後、偉大事前に構築されたソリューションがある場合ます。

<時間>

関連質問:は半径内のすべての郵便番号の取得(これは私を助けていない)
また、私はこの SourceForgeののプロジェクトを知っているが、それは遺棄、もはや使用中ではありません。

役に立ちましたか?

解決

私は、ラジアル検索円(minlat あなたは空想取得したい場合は、

は、SQLサーバは、空間インデックス。

他のヒント

これは、実際に解決するために非常に難しい問題です。私はあなたがデータベースを事前に作成することによって、いくつかの不正行為を行うことをお勧めします。クエリが入ってくるときには、その後、あなたが見つける必要がある近のどんな種類のグリッドを作成し、例えば、各方向にすべての10マイルを取り、その格子点との距離をそれぞれのzipのデータベースにエントリを追加し、最初のグリッドポイントの一つにクエリ点を翻訳します。今、あなたは非常に簡単に距離を調べることができます。

このソリューションは、基本的に時間の取引空間を意味するので、あなたはすぐに、非常に大規模なデータベースを得ることができます。良いニュースは、次のとおりです。それは、インデックスに非常に簡単なデータです。

あなたは GeoNames.org を見なければなりません。あなたが探しているもののために自分の Webサービスを照会することができ、またはあなたは、DL可能thierデータベースます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top