MySQL查询计算两个坐标之间的距离但使用HAVING子句太慢

问题描述

我有以下查询来计算两个坐标之间的距离。但是,我想选择 n 公里范围内的用户。比如说,我想选择 100 公里范围内的所有用户。因此,我必须在这里使用 HAVING 子句。但是,我看到执行速度太慢了。即使只有两条记录,它也会非常缓慢地返回结果。我想知道一百万用户记录(将来)会发生什么。因此,我正在寻求对当前查询的优化,以提高运行效率和速度。

SELECT *,111.1111 *
  DEGREES(ACOS(LEAST(1.0,COS(RADIANS(a.latitude)) 
  * COS(RADIANS(b.latitude)) 
  * COS(RADIANS(a.longitude) - RADIANS(b.longitude)) 
  + SIN(RADIANS(a.latitude))
  * SIN(RADIANS(b.latitude))))) AS distance_in_km 
FROM users AS a
JOIN users AS b ON a.id <> b.id
WHERE b.id != :user AND a.id = :user 
HAVING distance_in_km < :maxdist 
LIMIT 30

更新

按照 Rick James 的建议,我已删除 GROUP BY 子句,并在 AND a.id = :user 子句中将其替换为 WHERE。到目前为止,这将返回与 GROUP BY 相同的结果。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)