mysql命令最近的geopoints

时间:2015-03-27 20:18:53

标签: mysql sql

我正在尝试订购一张有大约1M记录的真正大桌子,这些记录有纬度和经度。

我不能使用Have因为有时最近的地方是100Mi,有时是1000Mi

有关如何解决此问题的任何想法?我的数据库已完全编入索引。我用我的查询运行Explain,每个JOIN都有索引(我在这个查询中有超过6个连接)

现在我正在使用这样的东西,我知道这不是最好的方法,但我认为这不是那么贵,就像我使用COS()

SQRT(POW(p.latitude - 25.6875703, 2) + POW(p.longitude - -100.283252, 2)) as deltaLoc

然后我订购表ORDER BY deltaLoc ASC LIMIT 0,9;

由于DB的增长速度非常快,我预计在下个月会有1M个新记录

或者我应该转移到其他数据库吗?

仅供参考我有8GB Ram和4 CPUS的VPS,我应该增加这个还是罚款?

由于

1 个答案:

答案 0 :(得分:2)

您想使用spatial data,它对距离排序有适当的支持。

欧几里德距离不适用于位于球体上的Lat / Lng坐标。对应于10度经度的距离将根据纬度而不同(在极点处为0米)。

我知道在PostgreSQL中使用PostGIS很简单,但我不确定它在MySQL中的支持程度如何。