Поиск по почтовому индексу близости - MySql - PullRequest
1 голос
/ 14 февраля 2010

У меня возникли проблемы с работой поискового запроса по почтовому индексу. Я искал и искал в Google, но все, что я нахожу, слишком медленное или я не могу работать. Вот проблема:

У меня есть база данных с таблицей со всеми почтовыми индексами США (~ 70 500 из них), и у меня есть таблица из нескольких тысяч магазинов (~ 10000 +), в которую входит их почтовый индекс. Мне нужно иметь возможность предоставить почтовый индекс и вернуть список ближайших магазинов к этому почтовому индексу, отсортированный по расстоянию.

Может кто-нибудь указать мне хороший ресурс для этого, который они использовали и могут справиться с такой большой нагрузкой, или поделиться запросом, который они использовали, который работает и довольно быстро об этом? Это будет высоко ценится. Спасибо!

1 Ответ

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

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

Если ваша основная задача - скорость, вы можете предварительно рассчитать все расстояния.Иметь таблицу, которая содержит столбец почтового индекса магазина, другой почтовый индекс и столбец расстояния.Вы можете ограничить другие почтовые индексы почтовыми индексами на определенном расстоянии (скажем, 100 миль или что у вас есть), если вам нужно сократить количество строк.Если вы не ограничите ссылки на основе расстояния, у вас будет таблица с> 700 миллионами строк, но вы, безусловно, сможете быстро выполнить поиск.

...