SQL 2008 を使用しているため、ネイティブの地理空間機能の使用を検討してください。次のような素晴らしいことができます:
- ポイントを表す地理タイプの永続的な計算列を作成します。
- 計算列に空間インデックスを作成します。これは
yourPoint.STDistance(@otherPoint) <= @distance
のようなものになります 効率的
そのように:
alter table [yourTable] add [p] as geography::Point(Latitude, Longitude, 4326) persisted; create spatial index [yourSpatialIndex] on [yourTable] ([p]) declare @Latitude float = <somevalue>, @Longitude float = <somevalue>; declare @point geography = geography::Point(@Latitude, @Longitude, 4326); declare @distance int = <distance in meters>; select * from [yourTable] where @point.STDistance([p]) <= @distance;
プレ>