Вы просто "рассчитываете" расстояние нескольких предметов? Или вы "ищете все в пределах 10 км? Есть огромная разница.
Последнее действительно является проблемой алгоритма того, как включить двумерную задачу в механизм 1D индексации.
План A: Нет соответствующего индекса - необходимо проверить все строки.
План B: INDEX(lat), INDEX(lng)
и использовать «ограничивающий прямоугольник»: WHERE lat BETWEEN... AND lng BETWEEN...
- оптимизатор выберет тот или иной индекс.
План C: Если у вас есть миллионы строк, скажите так; есть более быстрый (но более сложный сложный ) способ.
Я не ответил на ваш вопрос, потому что это наименее важная часть алгоритма. Но я сейчас отвечу.
Хаверсин занимает примерно вдвое больше, чем плоская земля плюс Пифагор. Но это только для вычислений; выборка строк гораздо важнее при обработке .
Haversine не требуется для такого небольшого расстояния. Я думаю, что это даже работает «правильно» при пересечении линии даты или полюса. Я подозреваю, что у плоской земли есть проблемы в этих крайних случаях.
Для плоской земли обязательно делите разницу долготы на COS(RADIANS(deg))
. (1 градус долготы в Хельсинки (на 60 градусах широты) вдвое меньше, чем на экваторе.)