我正在尝试创建一个新表,其中包含另一个表中每个地址的列表,它是最近的10个地址。每条记录都有经纬度。显然,对所有人进行全部工作比需要的工作要多得多(数百万条记录)。
然而,如果我使用纬度,经度对表进行索引/索引,它会自动按距离排序,我可以直接按ID +/- 25逐步查看每个记录。
然而,这仍然留给我一个问题;如何查询每个具有纬度/经度的两个记录之间的距离是什么样的?
答案 0 :(得分:0)
如果我是你,我的纬度和经度都有索引。然后,我会执行SELECT COUNT(*) FROM table WHERE (table.latitude BETWEEN (query_lat - x) AND (query_lat + x)) AND (table.longitude BETWEEN (query_long - y) AND (query_long + y));
之类的操作,每次都会优化x
和y
,直到计数下降到大约100条左右的记录。 (也许我会将最终的x
和y
值存储到查询地址的记录中,以便下次我不必再进行这么多查询。)然后我就是&#39 ; d运行查询所有列,而不仅仅是COUNT(*)
,以获得实际的纬度和经度,并可能使用堆队列来获得25个最短距离。
这里真正困难的是经度和距离之间的关系也取决于纬度;他们不是独立的。我不确定在查询中加入球面坐标转换是一个好主意。
你的使用纬度/经度为id的技巧是不会起作用的,因为它只是没有排序。例如,那种类型会告诉你休斯顿离奥斯汀更接近圣安东尼奥。