Mysql 计算两点之间的距离非常慢

Mysql 计算两点之间的距离非常慢,mysql,Mysql,我将X,Y坐标的地图存储在点行中的“坐标”表中 目前它是一个1000x1000网格地图,因此有一百万行 如果我想为所选点选择所有相邻坐标,让我们假设它是130,130,我将触发此查询: SET @x = 130; SET @y = 130; SELECT astext(PointFromWKB(coordinates)) AS coords, ROUND(GLength(LineStringFromWKB(LineString(GeomFromText(astext(PointFromWKB

我将X,Y坐标的地图存储在点行中的“坐标”表中

目前它是一个1000x1000网格地图,因此有一百万行

如果我想为所选点选择所有相邻坐标,让我们假设它是130,130,我将触发此查询:

SET @x = 130;
SET @y = 130;

SELECT astext(PointFromWKB(coordinates)) AS coords, 
ROUND(GLength(LineStringFromWKB(LineString(GeomFromText(astext(PointFromWKB(coordinates))),
      GeomFromText(astext(PointFromWKB(POINT(@x, @y)))))))) AS distance 
FROM coordinates 
ORDER BY distance
但是它非常慢-处理这个查询大约需要2,50秒,如果我删除ORDERBY语句,它几乎是即时的

我怎样才能加快速度


我为coords列创建了空间索引,但我不知道如何使用它。

您可以按如下方式将查询和顺序分开

设置@x=130; 设置@y=130; 从中选择* 从WKBCoordinates中选择AstextPoints作为坐标, RoundGlenGTHLINestingFromWKBListingGeomFromTextAstextPointFromWKBCoordinates, GeomFromTextastextPointFromWKBPOINT@x,@y作为距离 从坐标为t
按距离排序;谢谢,但是这个查询花费了更多的时间3.522秒:我想我应该只选择带有WHERE子句和空间索引的坐标范围,但我不知道如何绕过它。