Оптимизация 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