郵便番号、住所などの巨大なデータベース(約500,000)があります。私は100マイルからの昇順でそれらを表示する必要がありますユーザーの郵便番号です。私は関連する緯度と経度の郵便番号のテーブルを持っています。どのような高速/より良い解決策になりますか?巨大なSQL Serverデータベースを使った距離計算
ケース1:距離を計算し、距離で並べ替える。私はセッション中にユーザーに現在の郵便番号、緯度、経度を持たせます。私はSQL Server関数を使って距離を計算します。
ケース2:50マイル圏内のすべての郵便番号を取得し、すべての郵便番号でビジネスを取得する。ここでは、ビジネスを見つけながらネストされたクエリでselectを書く必要があります。
ケース1は、データベース内のすべてのビジネスの距離を計算すると考えています。 2番目のケースでは郵便番号だけが取得され、必要なビジネスのみを取得します。したがって、ケース2はより良いはずですか?私はここで何か提案を感謝します。ここで
ケースサイドノートアプリ1.
var businessListQuery = (from b in _DB.Businesses
let distance = _DB.CalculateDistance(b.Zipcode,userLattitude,userLogntitude)
where b.BusinessCategories.Any(bc => bc.SubCategoryId == subCategoryId)
&& distance < 100
orderby distance
select new BusinessDetails(b, distance.ToString()));
int totalRecords = businessListQuery.Count();
var ret = businessListQuery.ToList().Skip(startRow).Take(pageSize).ToList();
のため、私が持っているLINQクエリは、C#であるされています。
おかげ
SQLを記述し、実行計画と統計を実行し、より速いものを見てください。パフォーマンスに問題がある場合は、ストアドプロシージャを作成してデータベースに格納し、比較してください。 –
インデックスビューを作成してインデックスにZipcodeを使用すると、このようにしてより速い結果を得ることができます。また、検索および注文時にインデックスベースを変更することもできます。 – KuldipMCA
シンプルで非常に高速な方法http://stackoverflow.com/questions/3983325/calculate-distance-between-zip-codes-and-users/3989830#3989830 –