MySQL最近的查询

时间:2014-12-20 20:12:09

标签: mysql distance spatial-query spatial-index

我有一个带有索引空间数据的MySQL表,如下所示:

CREATE TABLE `mytable` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `TIME` datetime DEFAULT NULL,
  `SPOT` point NOT NULL,
  PRIMARY KEY (`ID`),
  SPATIAL KEY `SPOT` (`SPOT`)
) ENGINE=MyISAM AUTO_INCREMENT=6473924464345089 DEFAULT CHARSET=utf8;

行插入如下:

INSERT INTO mytable (time, spot) VALUES (now(), (GeomFromText('POINT(110.0 120.0)', 4326)));

我正在进行查询以找到给出latlong的最近点

SELECT id, x(spot) as longitude, y(spot) as latitude 
    FROM mytable
    ORDER BY st_distance(GeomFromText('POINT(10.0 12.0)', 4326), spot) LIMIT 5;

但它正在进行全表扫描,但现场'被编入索引。

我很感激任何优化它的帮助!

1 个答案:

答案 0 :(得分:1)

将Spot编入索引没有帮助,MySQL仍然需要从点st_distance计算每个10.0, 12.0才能订购它。

如果您不想快速进行此类搜索,则应添加where condition以缩小可能足够接近的点数,这可能会使用索引。