Оптимизация вызова формулы haversine SQL в PHP - PullRequest
10 голосов
/ 09 февраля 2010

Я создаю вызов MySQL с помощью PHP, я вычисляю расстояние с помощью форума haversine:

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 ]

4 голосов
/ 09 февраля 2010

Вы используете Сферическую формулу закона косинусов , а не Формула Хаверсина (которая немного медленнее).

Выполнение математики в MySQL, вероятно, будет намного быстрее, я советую вам прочитать этот вопрос Я спросил некоторое время назад, что касается оптимизации скорости, вы обязательно должны прочитать отличные Geo Поиск по близости с бумагой MySQL , обратите особое внимание на страницы 8-14 и 19 .

2 голосов
/ 09 февраля 2010

Для очень быстрого индексатора MySQL, проверьте Sphinx . Он очень быстро находит то, что вам нужно в вашей базе данных MySQL, и автоматически выполняет расчеты гео / расстояния.

Учебное пособие: Гео / Пространственный поиск с использованием Sphinx Search и PHP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...