我有mysql表,需要查找彼此相距1公里以内的所有用户 表:
Geo
----------
id(int)
location(geometry) with spatial index
username(string)
可以解决:
所以复杂性是~O(n)或更多(取决于指数),任何其他具有更好性能的解决方案?
答案 0 :(得分:1)
由于您的数据是2D,并且您知道半径,因此可以为数据构建网格索引。然后每个小区只向每个相邻小区发送消息。
计算单元格分配是O(n)。因此,当n * O(m * m)
是您的最大小区占用率时,这应该将此任务降低到m
。
请注意,这里很难保证。如果你的所有物体都在1公里范围内,那么没有任何索引可以帮到你。每个人都必须发送给其他人,os它将是二次的。
答案 1 :(得分:0)
Mysql对R-Tree使用spatial indexes,因此只要您的索引适合内存,就应该优于O(n)性能。