6

特定のポイントの半径内のポイントを取得するための最も効率的なクエリを作成しようとしています。結果はそれほど正確である必要はないので、正確さよりも速度を優先します。

次のように、STDistance を使用してポイントの距離を比較する where 句を使用してみました (ここで、@point と v.GeoPoint は地理タイプです)。

WHERE v.GeoPoint.STDistance(@point) <= @radius

また、これに似た STIntersects を使用するもの:

WHERE @point.STBuffer(@radius).STIntersects(v.GeoPoint) = 1

これらのクエリのいずれかが優先されますか、それとも見逃した別の機能がありますか?

4

1 に答える 1

3

精度が最優先されない場合は、フィルター機能を使用することをお勧めします:http: //msdn.microsoft.com/en-us/library/cc627367.aspx

これは、一致が正確であるかどうかを確認するためのチェックを行わないため、多くの場合、桁違いに高速になる可能性があります。インデックスでは、データはグリッドパターンで格納されるため、このアプローチがどの程度実行可能かは、おそらく空間インデックスオプションによって異なります。

また、多くの一致が必要ない場合は、最初にフィルターを実行してから、完全な交差を実行することが実行可能である可能性があります。

于 2011-06-20T07:58:53.433 に答える