【问题标题】:MySQL nearest queryMySQL 最近查询
【发布时间】:2024-01-07 05:10:01
【问题描述】:

我有一个带有索引空间数据的 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;

但它正在执行全表扫描,尽管 'spot' 已编入索引。

如果能帮助我优化它,我将不胜感激!

【问题讨论】:

    标签: mysql distance spatial-query spatial-index


    【解决方案1】:

    Spot 被索引并没有帮助,MySQL 仍然需要从点 10.0, 12.0 计算每个 st_distance 才能对其进行排序。

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

    【讨论】:

    • 非常感谢安德烈亚斯。这很有趣,因为我有另一个查询返回与矩形相交的行,并且使用了索引。我原以为它会以类似的方式工作。