Vì bạn đang sử dụng SQL 2008, hãy xem xét sử dụng các khả năng không gian địa lý gốc. Bạn có thể làm những điều thú vị như:
- Tạo một cột được tính toán liên tục của loại địa lý thể hiện quan điểm của bạn.
- Tạo chỉ mục không gian trên cột được tính toán. Điều này sẽ làm cho những thứ như
yourPoint.STDistance(@otherPoint) <= @distance
hiệu quả
Như vậy:
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;