Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查找坐标之间最近距离的SQL查询运行速度非常慢_Mysql_Sql_Coordinates_Geospatial - Fatal编程技术网

Mysql 查找坐标之间最近距离的SQL查询运行速度非常慢

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') )

我有下面的问题,这确实有效。它接受一个硬设置的纬度和经度,并找到最近的一组坐标,以及它的邮政编码

我遇到的问题是查询的速度。目前运行需要3.8秒,我需要检查9000个单独的坐标

任何关于如何加快这一进程的建议都将不胜感激

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包:。