MySql性能查找1公里范围内的所有用户

时间:2012-12-08 21:45:58

标签: mysql sql complexity-theory spatial spatial-index

我有mysql表,需要查找彼此相距1公里以内的所有用户 表:

Geo
----------
id(int)
location(geometry)  with spatial index
username(string)

可以解决:

  1. 由用户i ... n
  2. 进行迭代
  3. 为每个选择特定多边形内的所有用户,使用索引
  4. 互相发送消息
  5. 所以复杂性是~O(n)或更多(取决于指数),任何其他具有更好性能的解决方案?

2 个答案:

答案 0 :(得分:1)

由于您的数据是2D,并且您知道半径,因此可以为数据构建网格索引。然后每个小区只向每个相邻小区发送消息。

计算单元格分配是O(n)。因此,当n * O(m * m)是您的最大小区占用率时,这应该将此任务降低到m

请注意,这里很难保证。如果你的所有物体都在1公里范围内,那么没有任何索引可以帮到你。每个人都必须发送给其他人,os它将是二次的。

答案 1 :(得分:0)

Mysql对R-Tree使用spatial indexes,因此只要您的索引适合内存,就应该优于O(n)性能。