Я новичок в mysql, но построил следующий запрос, который
- Находит ближайших пользователей, используя таблицу latlong POINT (таблица pos).
- Удаляет пользователей, которые уже были оценены (прокрутка таблицы).
- Объединение результатов в таблицу users.
например. найти людей около POINT (95,95) для пользователя с id = 1 (упрощенные значения latlong)
SELECT users.id, name, email, gender, birthyear, latlong FROM (
SELECT * FROM (
# Find nearby users.
SELECT * FROM pos
WHERE X(latlong) BETWEEN 90.0 AND 100.0
AND Y(latlong) BETWEEN 90.0 AND 100.0
) AS nearby WHERE owner NOT IN (
# Find users already rated.
SELECT target FROM swipes WHERE owner = 1
) AND id != 1
) AS unratedNearby JOIN users ON unratedNearby.owner = users.id;
Все это работает отлично, но меня беспокоит сложность этого запроса и его масштабирование. У меня есть SPATIAL KEY 'latlong' ('latlong')
на таблице pos (я понимаю, что это неоптимальный способ найти близких пользователей, но точность здесь не так важна). Любой пользователь может иметь бесконечное количество проверок.
Будет ли этот запрос распадаться после того, как таблицы пользователей и swipes начнут становиться очень большими? Существуют ли какие-либо индексы, которые я должен использовать помимо пространственного ключа?