Оптимизация SQL-вызова формулы haversine в PHP
Я создаю вызов MySQL с помощью PHP, я вычисляю расстояние с помощью haversine forumula:
SELECT name, id,
(6371 * acos(cos(radians(' . $lat . '))
* cos(radians(geoname.latitude))
* cos(radians(geoname.longitude) - radians(' . $lon . '))
+ sin(radians(' . $lat . '))
* sin(radians(geoname.latitude)))) AS distance
мой вопрос: лучше ли делать все эти вычисления в SQL? Этот запрос выполняет поиск в таблице около 1000 записей. Было бы более эффективно делать некоторые математические вычисления в PHP, а не в SQL? Есть ли лучший способ оптимизировать этот запрос?
2 ответов
вы используете косинусов формула, а не Haversine Формула (что немного медленнее).
выполнение математики в MySQL, вероятно, будет намного быстрее, я советую вам читать здесь Я спросил некоторое время назад, что касается оптимизации скорости, вы обязательно должны прочитать отличный Гео поиск близости с MySQL бумага обратите особое внимание на страницах 8-14 и 19.
для супер быстрого индексатора MySQL Проверьте Сфинкс. Это очень быстро для поиска того, что вам нужно в вашей базе данных MySQL, и делает расчеты гео/расстояния автоматически.
руководство: Гео / пространственный поиск с помощью Sphinx Search и PHP