我的目标是能够编写一个查询,以便我可以在一个特定半径的纬度和长度之间找到表格中的所有行。
这样的查询:
SELECT * FROM some_table WHERE lat > someVariableMinLat AND
lat < someVariableMaxLat AND
lng > someVariableMinLng AND lng < someVariableMaxLng;
沿着这些方向。
现在,我的想法当然应该是一个索引,我只想确认一下,相关阅读或信息会很棒,谢谢!
答案 0 :(得分:3)
您的查询需要componentDidMount
才能运行,假设您已将 lat 和 lng 设置为辅助索引。
由于您对相关的阅读和信息感兴趣,我很乐意与您分享我的小知识。让我先从允许过滤开始。您创建了一个相当复杂的查询,(1)使用&lt; 和&gt; 而不是 = (2)在多个非主键列上。
允许过滤的作用是首先查询数据库,然后在其上应用部分部分条件。因此,如果您关注性能,那么效率远远不够。
说到性能,需要注意的是,往往具有更多不同值的列不适合设置为辅助索引。您可以找到有关此主题的更多信息here。
我该怎么做?
我不确定你的要求。但您可以考虑使用Geohash。 Geohash是经度和纬度的编码形式。它也可以非常精确。通过使用geohash字符串,您可以在字符的geohash长度和精度(字符串越长,它们变得越贵)之间进行权衡游戏。也许您可以将geohash设置为索引列,这意味着geohash越长,列的值就越明显。您甚至可以考虑将其设置为将性能提升到更高级别的主键。
或者,您可以设置两个主键。一,保持简短的geohash,另一个保持同一位置的较长哈希,如果你想要不同的精度水平:)