【发布时间】:2016-11-15 09:50:51
【问题描述】:
我对 MYSQL 查询和优化它们不是特别了解,所以我需要一些帮助。我正在检查一张国际城市表,根据表中的经度和纬度值查找最近的 10 个城市。
我使用的查询如下:
SELECT City as city,
SQRT(POW(69.1 * (Latitude - 51.5073509), 2) +
POW(69.1 * (-0.1277583 - Longitude) * COS(Latitude / 57.3), 2)) AS distance
from `cities`
group by `City`
having distance < 50
order by `distance` asc
limit 10
(经度和纬度值显然是在我的代码中动态放置的)
有时这可能需要我的开发环境大约 3-4 分钟才能完成。
我是否在这里犯了任何典型的错误,或者我应该使用更好的查询来检索这些数据?
非常感谢任何帮助。
【问题讨论】:
-
能否提供一个执行计划?
-
选择中的计算通常很慢,所以我认为这是你的问题
-
您可以添加过滤器以首先限制矩形 WHERE abs(Latitude-51.5073509)
-
查询为假。将距离放在 HAVING 子句中是没有意义的。你到底想达到什么目的?