我在'坐标'表中存储了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索引,但我不知道如何使用它。
答案 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;
这将快速运行您的查询,然后对结果集进行排序,这也是一个快速操作。