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

问题描述 投票:0回答:1

我必须构建

posts
表的结构来处理大量数据(比方说,一百万行),特别是这两个字段:

  • latitude
  • longitude

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

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

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

我总是害怕看到 ORM 为构建此类查询而执行的所有操作,例如

SIN()
。我想遵循最佳实践,以确保它能够扩展,事件有很多行。

注意:如果不可能有通用的解决方案,假设数据库是 MySQL。

谢谢。

mysql sql database bigdata
1个回答
1
投票

将这些复合索引添加到表中:

INDEX(latitude, longitude),
INDEX(longitude, latitude)

假设两列上都有

WHERE
子句,优化器将选择这两个索引中较好的一个。有关进一步的讨论和更高级(更快)的技术,请参阅查找最近的

在那里,我指出 6 个小数位在分辨率上可能有点过大,除非你试图区分两个站在一起的人。

还有参考代码,其中包括处理大圆距离的三角学。

© www.soinside.com 2019 - 2024. All rights reserved.