我对此查询有疑问:
SELECT city,6371 * ACos( Cos(RADIANS(Lat)) * Cos(RADIANS(51.166698)) * Cos(RADIANS(-1.7833) - RADIANS(Lng)) + Sin(RADIANS(Lat)) * Sin(RADIANS(51.166698)) ) AS Distance
FROM GeoPC
GROUP BY city ORDER BY Distance LIMIT 20
查询大约需要30秒。数据库中有大约170万行,并且按顺序排序,数据库的顺序太重。 知道如何解决它吗?
答案 0 :(得分:0)
您是否尝试将Distance参数移动到GeoPC表中的计算字段?从表面上看,我看不出它产生了巨大的差异,但它可以快速尝试。
答案 1 :(得分:0)
使用Haversine函数计算WGS84大地坐标系中两点之间的距离(例如,lat / lng)。 MySQL支持更高性能的地理空间类型和功能。您需要将字段Lat,Lng(我假设为十进制类型)替换为POINT()类型的单个字段。有办法走过你的桌子来做这件事。完成后,您可以使用MySQL的地理空间方法计算两点之间的距离。这是最近关于这个主题的博客:
以下是关于地理空间类型的MySQL在线文档: http://dev.mysql.com/doc/refman/5.0/en/mysql-spatial-datatypes.html