0

我想在 MySQL 数据库中创建一个包含列的表:

  1. 指数
  2. 纬度
  3. 经度
  4. 国家,城市,人民,建筑物等的地方。

行数巨大,从数十万到数百万行。

如果我想获取表格中选定行的最近位置,我怎样才能以最快的方式做到这一点?

如果需要更多信息、索引或预排序,这没有问题。

======
编辑1:
我已阅读答案,答案是使用公式,例如来自最佳答案:
(((acos(sin((".$latitude."*pi()/180) ) * sin(( geo_latitude*pi()/180))+cos((".latitude."*pi()/180)) * cos(( geo_latitude*pi()/180)) * cos(((".$经度。"- geo_longitude)*pi()/180))))*180/pi())*60*1.1515*1.609344)

如果我有 100 万行,这意味着有 100 万次昂贵的计算。我觉得它会很慢。

是否优化,例如在开始时使用过滤:
1. 如果输入是位置 10.000、20.000 的城市 A,则过滤位于 9.000 到 11.00 的城市。
2. 用上式计算。

如何优化该算法的速度?

====
编辑2:
对不起,我只阅读了最佳答案。
我在另一个答案中找到了我想要的东西:http ://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

4

1 回答 1

0

您可以使用四键。quadkey 是类似于四叉树的空间索引。它将点排序为网格,然后您可以搜索中心点周围的网格。这并不容易理解,但你可以下载我的 php 类 hilbert-curve@phpclasses.org。或者您可以使用本机 MySQL 空间扩展和点数据类型。但是我的实现使用四键和希尔伯特曲线并且可以更好。这很大程度上取决于数据。harvesine 公式的问题在于它非常慢。但是您可以同时使用这两种算法来获得更好的结果。

于 2013-10-13T22:31:21.123 回答