Дистанционный поиск SQL Server

У меня есть база данных Microsoft SQL Server с таблицей местоположений. У каждого местоположения есть свой адрес, а также координаты широты и долготы.

В моем приложении пользователь может ввести почтовый индекс, и мы вернем список близлежащих мест. Это мой подход. а) Используя базу данных почтовых индексов, я ищу почтовый индекс в широте и долготе (это центральная точка). б) Я провожу такой поиск

SELECT Position_ID, distance(pos_lon,pos_lat,zip_lon,zip_lat) dist 
FROM Positions
ORDER BY dist

«расстояние» - это функция, которая вычисляет расстояние между двумя точками.

Проблема в том, что по мере того, как моя база данных местоположения увеличивает время выполнения этих поисков, начинает расти.

Есть ли лучший подход?


person gonso    schedule 17.02.2010    source источник
comment
Какая версия SQL? Если 2008, обратитесь к ответу Марка Байерса ниже.   -  person Chris Simmons    schedule 17.02.2010


Ответы (3)


Если вы используете SQL Server 2008, вы, вероятно, захотите изучить тип столбца geography, функцию STDistance и пространственные индексы.

person Mark Byers    schedule 17.02.2010

Я бы сделал расчет прямоугольника вокруг вашего почтового индекса на указанном расстоянии, чтобы получить значения широты и долготы для четырех углов. Затем выполните простое сравнение значений вашей позиции, чтобы выбрать те, которые попадают в квадрат. Таким образом, вам не нужно рассчитывать расстояние от вашего почтового индекса до каждой точки в вашей базе данных для каждого поиска.

person Ray    schedule 17.02.2010

Какая версия SQL-сервера? Если в 2008 году обратите внимание на пространственный тип.

http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx

РЕДАКТИРОВАТЬ: Также ограничение этого запроса с помощью where, вероятно, поможет, поскольку вы, вероятно, не хотите заходить слишком далеко в каком-либо конкретном направлении.

person jfrobishow    schedule 17.02.2010