SQL Server удаленный поиск - PullRequest
       17

SQL Server удаленный поиск

4 голосов
/ 17 февраля 2010

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

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 17 февраля 2010

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

1 голос
/ 17 февраля 2010

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

0 голосов
/ 17 февраля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...