我有一个查询返回所有记录,与我的 MySQL 5.7 数据库中的 POINT
字段相比,按距固定点的距离排序。
举个简单的例子,假设它看起来像这样:
SELECT shops.*, st_distance(location, POINT(:lat, :lng)) as distanceRaw
FROM shops
ORDER BY distanceRaw
LIMIT 50
我的实际查询还必须进行一些连接才能为结果获取其他数据。
问题是,为了按距离对数据进行排序,它需要计算数据库中每条记录的距离(目前大约有 100,000 条记录)。
我无法缓存查询,因为它只会特定于那些原始坐标。
无论如何限制必须计算的数据?例如,对附近商店进行可靠的粗略计算,例如
lat
+ lng
的 +/- 3 度?所以它只需要处理数据的一个子集?如果有人在这种优化方面有任何经验,我希望得到一些建议,谢谢。
最佳答案
是的,您可以在 where 标准中使用一些简单的近似值来过滤掉那些明显超出半径的位置。标题为“SQL(MySQL、PostgreSQL、SQL Server)的快速最近位置查找器”的This great blog post 描述了这样的优化:
以上描述了边界矩形的理论背景。
关于mysql - 提高空间 MySQL 查询的性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36128379/