2013-12-11 4 views
0

у меня есть проблемы с этим запросом:Широта Долгота MySQL запрос

SELECT city,6371 * ACos(Cos(RADIANS(Lat)) * Cos(RADIANS(51.166698)) * Cos(RADIANS(-1.7833) - RADIANS(Lng)) + Sin(RADIANS(Lat)) * Sin(RADIANS(51.166698))) AS Distance 
    FROM GeoPC 
    GROUP BY city ORDER BY Distance LIMIT 20 

Запрос необходимо около 30 секунд. В базе данных около 1,7 миллиона строк, а группа по порядку - слишком тяжелая для базы данных. Любая идея, как я могу это исправить?

+0

, сколько времени требуется, если удалить заказ на и группы по? – johnny

+0

без заказа и группы им только нужно 0.0097 сек – user3091381

+0

взять группу и ограничить до подзапроса, не так много, но немного могу сказать. – johnny

ответ

0

Вы пробовали переместить параметр Distance в вычисленное поле в таблице GeoPC? На первый взгляд, я не вижу, чтобы это имело огромное значение, но это можно попробовать.

0

Ваше использование функции Haversine для вычисления расстояния между двумя точками в геодезической системе координат WGS84 (например, lat/lng). MySQL поддерживает геопространственные типы и функции, которые имеют гораздо более высокую производительность. Вам нужно будет заменить поля Lat, Lng (которые, как я предполагаю, имеют тип decimal) с одним полем типа POINT(). Для этого есть способы пройтись через ваш стол. После этого вы можете использовать геопространственные методы MySQL для расчета расстояния между двумя точками. Вот недавний блог на тему:

http://www.mysqlperformanceblog.com/2013/10/21/using-the-new-spatial-functions-in-mysql-5-6-for-geo-enabled-applications/

Вот MySQL документацию на геопространственных типов: http://dev.mysql.com/doc/refman/5.0/en/mysql-spatial-datatypes.html

+0

Большое спасибо. Я попробовал, но это тоже медленно. Проблема заключается в заявлении «Порядок по расстоянию», это делает мой запрос очень медленным. Без «Order By Distance» это быстро. – user3091381

+0

Я не уверен, насколько хороши эти ответы, но вот предыдущая статья на одном и том же с несколькими ответами: http://stackoverflow.com/questions/16276752/mysql-query-slow-when-using-order-by -с-функции к-расстояние Статистика между ними –

Смежные вопросы