使用地理位置按距离排序提高性能

Posted

技术标签:

【中文标题】使用地理位置按距离排序提高性能【英文标题】:Improve performance using geolocation to sort by distance 【发布时间】:2016-10-21 20:34:54 【问题描述】:

我必须构建一个posts 表的结构来处理大量数据(比如说,100 万行),尤其是这两个字段:

latitude longitude

我想做的是在按距离排序时优化读取查询所消耗的时间

我选择了这种类型:decimal(精度:10,小数位数:6),认为它比 float 更精确,并且相关。

latitude 上添加索引和在longitude 上添加索引是否合适?

我总是害怕看到 ORM 为构建此类查询而执行的所有操作,例如 SIN()。我想遵循最佳实践,以确保它可以扩展,有很多行的事件。

注意:如果没有通用的解决方案,假设数据库是 mysql

谢谢。

【问题讨论】:

数据结构,例如索引,通常是特定于提供商的。请说明您的具体需求(关于数据库类型) 我只是选择了 MySQL 来澄清一下。 【参考方案1】:

INDEX(latitude) 会有所帮助。但是要显着加快速度,您需要复杂的数据结构和代码。见my blog

在那里,我指出 6 位小数在分辨率上可能是多余的,除非您试图区分两个站在一起的人。

还有包含处理大圆距离的三角函数的参考代码。

【讨论】:

以上是关于使用地理位置按距离排序提高性能的主要内容,如果未能解决你的问题,请参考以下文章

Solr - 如何按地理空间距离排序并返回距离?

我正在尝试按位置对用户的帖子进行排序并使用 PFGeopoint 和 Swift 显示距离

Elasticsearch 地理距离排序不完全/错误的顺序

按距离排序 Facebook Places 结果

如何从按距离排序的 JPA 实体中获取结果?

按用户位置与 Firebase 附近的距离对数组进行排序