使用地理位置按距离排序提高性能
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 位小数在分辨率上可能是多余的,除非您试图区分两个站在一起的人。
还有包含处理大圆距离的三角函数的参考代码。
【讨论】:
以上是关于使用地理位置按距离排序提高性能的主要内容,如果未能解决你的问题,请参考以下文章