什么是在半径MySQL(纬度经度)内查找大表的最快方法

目前我有几个表有100k行.我试图查找如下数据.

SELECT
*, SQRT(POW(69.1 * (latitude - '49.1044302'), 2) + POW(69.1 * ('-122.801094' - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM stops
HAVING distance < 5
ORDER BY distance limit 100

但目前这种方法在高负荷下会变慢.有些查询需要20秒才能完成.

如果有人知道任何更好的优化方法,这将是伟大的.

解决方法:

首先,如果你有很多地理空间数据,你应该使用mysql的地理空间扩展而不是像这样的计算.然后,您可以使用create spatial indexes来加速许多查询,并且您不必编写如上所述的长抽取查询.

使用与ST_Distance的比较或创建具有感兴趣半径的几何以及ST_within可能会给您带来良好的结果,并且可能比当前快得多.然而,实现这一目标的最好和最快的方法,ST_Dwithin还没有在mysql中实现.

上一篇:python – 将复杂的SQL查询转换为SQLAlchemy


下一篇:c# – 如何使用dapper将DbGeography插入SQL Server