目前我有几个包含 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 的地理空间扩展,而不是像这样的计算。那么你可以创建空间索引 https://dev.mysql.com/doc/refman/5.7/en/creating-spatial-indexes.html这将加快许多查询的速度,并且您不必像上面那样编写冗长的查询。
使用与ST_距离 http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html#function_st-distance或者使用 ST_within 创建具有感兴趣半径的几何图形可能会给您带来良好的结果,并且可能比当前快得多。然而实现这一目标的最佳和最快的方法是ST_D内 http://postgis.net/docs/ST_DWithin.htmlmysql 中尚未实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)