У меня есть запрос, который возвращает все записи, упорядоченные по расстоянию от фиксированной точки, по сравнению с полем в моей базе данных MySQL 5.7.Улучшение производительности пространственного запроса MySQL
Для простого примера, предположим, что это выглядит следующим образом:
SELECT shops.*, st_distance(location, POINT(:lat, :lng)) as distanceRaw
FROM shops
ORDER BY distanceRaw
LIMIT 50
Мой фактический запрос также должен сделать несколько объединений, чтобы получить дополнительные данные для результатов.
Проблема заключается в том, что для сортировки данных по расстоянию ему необходимо рассчитать расстояние по каждой отдельной записи в базе данных (в настоящее время около 100 000 записей).
Я не могу кэшировать запрос, поскольку он будет специфичен только для этих исходных координат.
Есть ли способ ограничить данные, которые необходимо рассчитать? Например, надежный приблизительный расчет для ближайших магазинов, скажем, +/- 3 градуса для lat
+ lng
? Так что ему нужно обработать только подмножество данных?
Если у кого-то есть опыт в такой оптимизации, я бы очень хотел получить совет, спасибо.
Я подробно расскажу об этой проблеме и о хорошем решении в [моем блоге] (http://mysql.rjweb.org/doc.php/latlng). –