У меня есть таблица с более чем 8 миллионами записей (geonames). Внутри этой таблицы имеется 19 столбцов, из которых 2 - широта и долгота.Ускорить запрос mysql для расстояния (широта, долгота)
Я хочу, чтобы найти ближайшее место от значений широты и долготы, и я делаю запрос:
SELECT * , (6371 * ACOS(COS(RADIANS(40.8333333)) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS(14.25)) + SIN(RADIANS(40.8333333)) * SIN(RADIANS(latitude)))) AS distance
FROM geoname
WHERE fclass = 'P'
HAVING distance <25
ORDER BY distance
LIMIT 0 , 20
Я установил ВТКЕЕ индекс йоту FCLASS, широта и долгота.
Проблема в том, что запрос занимает 5,6027 секунд. слишком много. Есть ли способ его оптимизировать? Я делаю что-то неправильно?
Благодаря
Посмотрите на [** Как оптимизировать SQL-запрос с вычислением расстояния по долготе и широте? **) (http://stackoverflow.com/questions/3093964/how-to-optimize-sql-query-with-calculate-distance-by-longitude-and-latitude) –
Первое, что нужно сделать, чтобы определить максимум с использованием примера расстояния прямоугольника: 'WHERE latitude Y и долгота W', которую вы вычисляете один раз. Это позволит устранить 90-95% возможностей и утонченность с реальным расстоянием займет гораздо меньше времени. –
Спасибо, Александр. Это решение ускоряется на 0,04 с запросом! :) – Luca