Поиск по почтовому индексу близости - MySql

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам