我们的mysql数据库中有超过200万的poi数据。在任何时候,我们都需要根据在这个链接http://sqlfiddle.com/#!2/abba1/4上找到的公式找到最近的点
select *, ( 3959 * acos( cos( radians(
-- latitude
@my_lat) ) * cos( radians(
destination.latitude ) ) * cos( radians(
destination.longitude ) - radians(
-- longitude
@my_lon) ) + sin( radians(
-- latitude
@my_lat) ) * sin( radians(
destination.latitude ) ) ) ) AS distance
-- table containing targets to compare distance
from destination
order by distance limit 1
;我们发现这个问题花了很长时间。一些论坛建议限制搜索基于+1和-1的lat和长值。现在的问题是,我们需要提供最低限度的保护措施。因此,优化在这方面有帮助,还是更好的方法来做到这一点?
发布于 2015-08-27 18:57:30
您可以使用Geohashing (地学)
您必须为表中的每个POI创建一个Geo散列。
然后,根据您选择的精度,您可以使用LEFT(your_geohash_column,'c1','c3','c4','c5','c6',c7','c8'),其中c's是由您所期望的精度计算出的中心的8个邻居。
请记住,您正在限制结果的精度,您可以认为它的半径。
https://dba.stackexchange.com/questions/74991
复制相似问题