Mysql 查找坐标之间最近距离的SQL查询运行速度非常慢
我有下面的问题,这确实有效。它接受一个硬设置的纬度和经度,并找到最近的一组坐标,以及它的邮政编码 我遇到的问题是查询的速度。目前运行需要3.8秒,我需要检查9000个单独的坐标 任何关于如何加快这一进程的建议都将不胜感激Mysql 查找坐标之间最近距离的SQL查询运行速度非常慢,mysql,sql,coordinates,geospatial,Mysql,Sql,Coordinates,Geospatial,我有下面的问题,这确实有效。它接受一个硬设置的纬度和经度,并找到最近的一组坐标,以及它的邮政编码 我遇到的问题是查询的速度。目前运行需要3.8秒,我需要检查9000个单独的坐标 任何关于如何加快这一进程的建议都将不胜感激 SELECT pcds, ROUND(MIN(distance), 4) AS distance FROM (SELECT `postcode`.`pcds`,( 6371 * acos ( cos ( radians('51.4932392') )
SELECT pcds, ROUND(MIN(distance), 4) AS distance FROM
(SELECT `postcode`.`pcds`,(
6371 * acos (
cos ( radians('51.4932392') )
* cos( radians( `postcode`.`lat` ) )
* cos( radians( `postcode`.`lng` ) - radians('-0.0846429') )
+ sin ( radians('51.4932392') )
* sin( radians( `postcode`.`lat` ) )
)
) AS distance
FROM postcode
ORDER BY distance
LIMIT 1
) AS First
将你的场地分成正方形,每正方形不超过10-20点。使用直接非计算比较,通过“点位于相同或相邻的正方形”执行预过滤,然后仅检查过滤点的距离。预先计算
sin/cos(弧度('51.4932392'))
并使用它们的值而不是表达式。在输出中乘以6371,而不是在子查询中。请使用正确的GIS包:。