如何在mysql中优化地理定位数据库以进行欧几里德距离搜索/查询

时间:2011-04-21 20:03:35

标签: mysql optimization geolocation

我使用mysql存储地理位置数据。我想知道如何优化包含(x,y)坐标的表,以便针对它优化查询。 (x,y将是lat / long)。

例如,我有一个包含以下字段的表:id,x,y,notes。

稍后,我会执行查询: 选择 * 来自geoloc 其中sqrt((x-x)^ 2 +(y- @ y)^ 2)<增量

请注意,我不知道实际的SQL语句现在如何工作,所以上面只是对我想要的一个非常粗略的想法。

那么我需要做些什么才能针对此类查询优化此表?任何指针都非常感激。

2 个答案:

答案 0 :(得分:3)

您将很难针对此类查询进行优化。更好的选择是从(x,y)坐标和传入的delta计算边界框。然后查询坐标落在该框中的任何位置。该查询将更加简单,并且可以使用您在x和y字段上可能具有的任何索引。

当然,该查询的结果并不精确,因为它是一个边界框而不是一个圆。如果想要更好的结果,可以从边界框查询中获取结果,然后使用较慢的欧几里德方法过滤掉不属于圆的那些。

答案 1 :(得分:0)

也许你可以尝试Voronoi图表。 看看这里 http://www.cs.sunysb.edu/~algorith/files/nearest-neighbor.shtml