0

与えられた座標からある程度の距離内にある場所を見つけようとしています。約32kレコードのテーブルでは、クエリに約2秒かかります。これは遅すぎます。

論理的なクラスター化されたインデックススキャンを実行しています。すべての場所の距離を計算する必要があります。ただし、これほど小さいデータセットよりも高速であると思います。空間インデックスを定義しましたが、使用されていません。強制するとクエリが失敗します。

ほとんどの時間(〜86%)は、距離を計算するフィルターに費やされます-それで、私はそれを最適化する方法を探しています、そして私はここでいくつかの助けが必要です。

私が使用しているクエリは次のとおりです。

SELECT Name
FROM Venue
WHERE (Coordinates.STDistance(geography::STPointFromText('POINT(-113.512245 51.498212)', 4326)) / 1000) <= 100 
4

1 に答える 1

0

古いアプローチの1つは、BOXfirxtを使用することです。

あなたのポイントから、ボックスの両端に2つのポイントを作成します。中心から+R/+Rと-R/-R。

次に、フィルタリングできます。ポイントは、このボックス内にあり、説明する円内にある必要があります。

ボックスチェックはインデックスで実行でき、ほとんどの要素を強制終了します。

シンプルな学校の幾何学。記述した円の周りに長方形のボックスを描画します。

インデックスにフィールドが含まれていないため、現在のアプローチではインデックスを使用できません。

別の方法:円を描く-距離の計算は使用しないでください。円を描く。ポイント付き。

または、 https://stackoverflow.com/questions/11311363/my-application-is-about-asp-net-using-linq-and-remote-mssql-my-connection-is-beを読んでください。これはあなたが尋ねるのと同じ問題です。 。

于 2012-07-03T13:03:26.210 に答える