Моя mysql (v8.0.19) тестовая таблица содержит 1000 записей местоположения. 250 из них я получаю в результате, если я запрашиваю «дать мне все userIds, которые находятся в радиусе 500 метров».
Мой первый запрос (0.033 se c) возвращает только userId:
SELECT db_user_id
FROM db.location
where st_distance_sphere(ST_GeomFromText('POINT(51.1065133 11.1245543)', 4326), geo) <= 500;
Мой второй запрос (0.045 se c) возвращает userId и расстояние:
SELECT db_user_id,st_distance_sphere(ST_GeomFromText('POINT(51.1065133 11.1245543)', 4326), geo)
FROM db.location
where st_distance_sphere(ST_GeomFromText('POINT(51.1065133 11.1245543)', 4326), geo) <= 500;
Моя догадка (почему второй запрос медленнее): st_distance_sphere вычисляется в операторе where (для 1000 записей местоположения) и снова для результата около 250 записей.
Мой вопрос: есть ли способ повторно использовать уже рассчитанную st_distance_sphere в качестве результата запроса? Есть ли такой же быстрый запрос, как первый, но возвращает идентификатор пользователя и расстояние?