MySQL Query获得最小距离(最近邻居)

时间:2013-05-10 23:44:35

标签: 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 ASC LIMIT 1

该表创建于:

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);

虽然我已经在纬度和经度列上创建了索引,但上面的查询运行速度非常慢(约60秒:表有大约3.4万个条目)。

当我省略按距离排序时,查询非常快,但当然不能保证给我最近的邻居。

如何提高查询的性能?我想在纬度和经度列上使用WHERE来限制结果集,确实减少了运行时间。出于某种原因它没有,你知道为什么吗?

0 个答案:

没有答案