用较少的努力在2D矢量中搜索

时间:2014-03-13 05:33:51

标签: mysql

假设我在数据库中有一个2D点(地理坐标)表。组织数据的最佳做法是在这个数据数组中搜索最接近给定坐标的行?

我无法弄明白:

SELECT * FROM `pois` WHERE 1 
ORDER BY ($x-`x`)*($x-`x`) + ($y-`y`)*($y-`y`) ASC LIMIT 1

如果表大小为1000行,则可以接受此方法。但如果poi数据库是100万行,那么它可能非常慢......

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

不是使用圆圈搜索,而是使用BETWEEN在广场中搜索,以便SQL可以利用X和Y上的索引,希望您已经拥有。

然后对您获得的数据子集进行完整的循环检查。