如何在mysql中优化地理位置数据库进行欧氏距离搜索/查询

如何在mysql中优化地理位置数据库进行欧氏距离搜索/查询,mysql,optimization,geolocation,Mysql,Optimization,Geolocation,我正在使用mysql存储地理位置数据。我想知道如何优化包含x,y坐标的表,以便针对它优化查询。x,y将为横向/纵向 例如,我有一个包含以下字段的表:id、x、y、notes 稍后,我将执行一个查询: 选择* 来自geoloc 其中sqrt x-@x^2+y-@y^2

我正在使用mysql存储地理位置数据。我想知道如何优化包含x,y坐标的表,以便针对它优化查询。x,y将为横向/纵向

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

稍后,我将执行一个查询: 选择* 来自geoloc 其中sqrt x-@x^2+y-@y^2 请注意,我现在不知道实际的SQL语句将如何工作,所以上面只是我想要的一个非常粗略的概念


那么,对于这种类型的查询,我必须做些什么来优化这个表呢?非常感谢任何指针。

对于这种查询,您将很难进行优化。更好的选择是根据传入的x、y坐标和增量计算边界框。然后查询坐标落在该框中的任何位置。该查询将更加简单,并且能够使用x和y字段上的任何索引


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

也许您可以尝试使用Voronoi图。 看看这里

边界框是在圆内还是在边界框内?您能举一个这样的sql查询的例子吗?现在,我发现了很多关于如何查询圆内点的信息。但是正如你所说的,你想要的精度越高,它的计算成本就越高。@user-圆圈应该在边界框内。这篇文章给出了一个很好的例子,说明了如何做到我所说的,谢谢。这似乎正是我想要的。我将测试它。我在这里测试了这些公式,对于一个有1000000条记录的mysql数据库,它们在不到1秒的时间内是可以接受的。然而,对于一个超过5000000条记录的数据库,1次查询的时间不到3分钟!这一结果与δ无关。我不需要精确性/准确性,只需要一些有用的东西。让我试试,我会给你回复的。顺便问一下,mysql具有地理空间功能,这是加快查询速度的另一种选择吗?是的。那个链接有用!非常感谢你。这是闪电般的5000000记录!少校投票!