MySQL查询获取最小距离(最近邻)
我正在尝试通过以下查询在地理空间数据库中查找GPS坐标(52,14)的最近邻居:MySQL查询获取最小距离(最近邻),mysql,performance,geospatial,nearest-neighbor,Mysql,Performance,Geospatial,Nearest Neighbor,我正在尝试通过以下查询在地理空间数据库中查找GPS坐标(52,14)的最近邻居: SELECT geonameid, SQRT(POW(latitude-52, 2) + POW(longitude-14, 2)) as distance FROM table WHERE latitude >= 52-1 AND latitude <= 52+1 AND longitude >= 14-1 AND longitude <= 14+1 ORDER BY distance A
SELECT
geonameid,
SQRT(POW(latitude-52, 2) + POW(longitude-14, 2)) as distance
FROM table
WHERE
latitude >= 52-1 AND latitude <= 52+1 AND
longitude >= 14-1 AND longitude <= 14+1
ORDER BY distance ASC LIMIT 1
虽然我已经在纬度和经度列上创建了索引,但上面的查询运行速度非常慢(大约60秒:表中有大约340万个条目)
当我忽略按距离排序时,查询速度非常快,但当然不能保证提供最近的邻居
如何提高查询的性能?我认为使用纬度和经度列上的WHERE来限制结果集,确实会大大减少运行时。由于某些原因,它没有,你知道为什么吗?你可以试试MySQL。您可以对地理查询进行索引和优化。
CREATE TABLE IF NOT EXISTS `table` (
`geonameid` int,
`latitude` DECIMAL(5,2),
`longitude` DECIMAL(5,2),
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
CREATE INDEX g USING BTREE ON table(latitude);
CREATE INDEX b USING BTREE ON table(longitude);