优化 Tinder 类型 mysql 查询
2022-09-04 23:20:21
我是mysql的新手,但已经构建了以下查询
- 使用 latlong POINTs 表(table pos)查找附近的用户。
- 删除已评分的用户(表格轻扫)。
- 将结果联接到用户表。
例如,为 id = 1 的用户查找 POINT(95,95) 附近的人(简化纬度值)
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;
这一切都很完美,但我担心这个查询的复杂性以及它将如何扩展。我有一个在桌面上的pos(我意识到这是一种寻找附近用户的次优方式,但准确性在这里并不那么重要)。任何一个用户都可以有无限数量的滑动。SPATIAL KEY 'latlong' ('latlong')
一旦用户和滑动表开始变得非常大,此查询是否会开始分解?除了空间键之外,我还应该使用任何索引吗?