#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 знаков после запятой, вероятно, являются излишеством в разрешении, если только вы не пытаетесь различить двух человек, стоящих рядом друг с другом.
Существует также ссылочный код, который включает тригонометрию для обработки больших расстояний по окружности.