我必须构建
posts
表的结构来处理大量数据(比方说,一百万行),特别是这两个字段:
latitude
longitude
我想做的是优化按距离排序时读取查询所消耗的时间。
我选择了这种类型:decimal(精度:10,小数位数:6),认为它比float更精确,并且相关。
在
latitude
上添加索引并在 longitude
上添加索引是否合适?
我总是害怕看到 ORM 为构建此类查询而执行的所有操作,例如
SIN()
。我想遵循最佳实践,以确保它能够扩展,事件有很多行。
注意:如果不可能有通用的解决方案,假设数据库是 MySQL。
谢谢。
将这些复合索引添加到表中:
INDEX(latitude, longitude),
INDEX(longitude, latitude)
假设两列上都有
WHERE
子句,优化器将选择这两个索引中较好的一个。有关进一步的讨论和更高级(更快)的技术,请参阅查找最近的
在那里,我指出 6 个小数位在分辨率上可能有点过大,除非你试图区分两个站在一起的人。
还有参考代码,其中包括处理大圆距离的三角学。