我们有一个mysql存储过程,它接受纬度和经度的输入。此存储过程必须返回距离此lat/long最近的3个区域以及距离给定lat/long的相应距离(以公里为单位)。
区域表具有id、名称和位置。位置为点类型,具有点(纬度、经度)。我尝试了以下解决方案:
SELECT
id,
name,
X(position) AS 'latitude',
Y(position) AS 'longitude',
(
GLength(
LineStringFromWKB(
LineString(
position,
GeomFromText('POINT(@lat @long)')
)
)
)
)
AS distance
FROM areas
ORDER BY distance ASC
limit 3;
上述解决方案中的几个问题:
查询速度慢。22k记录需要200毫秒。如果我删除ORDERBY子句,性能会显著提高,即只需20毫秒。我已经为position列创建了空间索引,但没有帮助。有人能建议如何优化这个查询吗?
我不知道如何把这个距离换算成公里?
以下是上述select语句的desc屏幕截图:
暂无答案!
目前还没有任何答案,快来回答吧!