Повышение производительности с помощью геолокации для сортировки по расстоянию

#mysql #sql #database #bigdata

#mysql #sql #База данных #bigdata

Вопрос:

Мне нужно построить структуру posts таблицы для обработки большого количества данных (скажем, 1 миллион строк), в частности, с этими двумя полями:

  • latitude
  • longitude

Что я хотел бы сделать, так это оптимизировать время, затрачиваемое на запросы чтения при сортировке по расстоянию.

Я выбрал этот тип: decimal (точность: 10, масштаб: 6), думая, что он более точный, чем float, и релевантный.

Было бы уместно добавить индекс на latitude и указатель на longitude ?

Мне всегда страшно наблюдать за всеми операциями, такими как SIN() , которые ORM выполняет для построения таких запросов. Я хотел бы следовать лучшим практикам, чтобы быть уверенным, что оно будет масштабироваться, событие с большим количеством строк.

Примечание: Если общее решение невозможно, предположим, что базой данных является MySQL.

Спасибо.

Комментарии:

1. Структуры данных, например индексы, часто зависят от поставщика. Пожалуйста, уточните, что именно вам нужно (в отношении типов баз данных)

2. Я просто выбрал MySQL для уточнения.

Ответ №1:

INDEX(latitude) поможет некоторым. Но чтобы сделать это значительно быстрее, вам нужна сложная структура данных и код. Смотрите мой блог.

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

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