我正在尝试订购一张有大约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,我应该增加这个还是罚款?
由于
答案 0 :(得分:2)
您想使用spatial data,它对距离排序有适当的支持。
欧几里德距离不适用于位于球体上的Lat / Lng坐标。对应于10度经度的距离将根据纬度而不同(在极点处为0米)。
我知道在PostgreSQL中使用PostGIS很简单,但我不确定它在MySQL中的支持程度如何。