假设我在数据库中有一个2D点(地理坐标)表。组织数据的最佳做法是在这个数据数组中搜索最接近给定坐标的行?
我无法弄明白:
SELECT * FROM `pois` WHERE 1
ORDER BY ($x-`x`)*($x-`x`) + ($y-`y`)*($y-`y`) ASC LIMIT 1
如果表大小为1000行,则可以接受此方法。但如果poi
数据库是100万行,那么它可能非常慢......
有什么想法吗?
答案 0 :(得分:0)
不是使用圆圈搜索,而是使用BETWEEN
在广场中搜索,以便SQL可以利用X和Y上的索引,希望您已经拥有。
然后对您获得的数据子集进行完整的循环检查。