MySQL 最近查询

标签 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;

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

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

最佳答案

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

如果您不想这么快地进行搜索,您应该添加一个 where 条件 来缩小可能足够接近的点的数量,这可以使用索引。

关于MySQL 最近查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583919/

相关文章:

java - 使用 Java Spring Boot 创建 MySQL JSON 列

PHP 脚本在数据库中写入时不考虑大于符号 (>)

sql - MySQL 批量值插入

r - 如何从距离矩阵中提取组内和组间距离?在 R

Elasticsearch 过滤替代 PostGIS 过滤?

python - 从 numpy 数组中获取给定半径内的值

MySQL 选择不同于表?

include - 如何使用 order By 和包含在 sequelize js 中

Android:如何使用 gps 测量距离

java - 用于空间查询的 Oracle SQL 11g CPU/IO 性能测量