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

时间:2014-12-28 21:43:19

标签: mysql

我在'坐标'表中存储了POINT()行内X,Y坐标的地图。

目前它是一个1000x1000的网格图,所以有100万行

如果我想为所选点选择所有相邻坐标(让我们假设它是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.5秒,如果我删除ORDER BY语句,它几乎是即时的。

我如何加快速度?

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

1 个答案:

答案 0 :(得分:0)

您可以按如下方式将查询和订单分开

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

select * from (
SELECT astext(PointFromWKB(coordinates)) AS coords, 
ROUND(GLength(LineStringFromWKB(LineString(GeomFromText(astext(PointFromWKB(coordinates))),
      GeomFromText(astext(PointFromWKB(POINT(@x, @y)))))))) AS distance 
FROM coordinates ) as t  
ORDER BY distance;

这将快速运行您的查询,然后对结果集进行排序,这也是一个快速操作。