MySQL 或 MariaDB 是否支持 GIS KNN 索引查询(k-最近邻)?

Eva*_*oll 5 mysql mariadb index spatial

例如,您可以在 MySQL 上执行k-最近邻算法 (k-NN)查询,以使用 PostGIS 在 PostgreSQL 中找到最近的点,我可以在空间索引上运行 kNN 查询<->

SELECT ST_AsText(geom), city
FROM person.address
ORDER BY geom <-> 'POINT(-121.626 47.8315)'
FETCH FIRST 7 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)

SQL Server 有一个类似的方法

DECLARE @g geography = 'POINT(-121.626 47.8315)';

SELECT TOP(7) SpatialLocation.ToString(), City
FROM Person.Address  
WHERE SpatialLocation.STDistance(@g) IS NOT NULL  
ORDER BY SpatialLocation.STDistance(@g);
Run Code Online (Sandbox Code Playgroud)

PostgreSQL 和 SQL Server 都有 KNN。<->在他们的空间索引上做 KNN的 MySQL 等价物是什么?


如果你不知道 KNN 是什么,你可以在这里看到描述

KNN 系统通过评估 PostGIS R-Tree 索引内边界框之间的距离来工作。

因为索引是使用几何体的边界框构建的,任何不是点的几何体之间的距离都将是不精确的:它们将是几何体的边界框之间的距离。

这里的关键是 KNN 方法,

  1. 难道不是要求您的查询与限制在一个距离WHERE条款
  2. 难道计算所有距离的所有点之间
  3. 可以在索引上找到最近的点。

这个问题特别是关于完成工作的方法。我意识到我可以得到相同的结果,通过计算从每个点到每个其他点的距离*,然后ORDERing 和LIMITing ,我可以得到更多的工作。

dan*_*ack 3

简而言之,MySQL 或 MariaDB 都没有。他们确实使用了 R 树,所以听起来并非不可能实现。我还没有在他们的错误跟踪器中看到此功能请求。