web-dev-qa-db-ja.com

MySQLまたはMariaDBはGIS KNNインデックスクエリ(k最近傍)をサポートしていますか?

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;

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

PostgreSQLとSQL Serverの両方にKNNがあります。 MySQLで空間インデックスに対してKNNを実行するための<->に相当するものは何ですか?


KNNが何であるかわからない場合は、 ここにその説明を表示できます

KNNシステムは、PostGIS Rツリーインデックス内の境界ボックス間の距離を評価することによって機能します。

インデックスはジオメトリのバウンディングボックスを使用して作成されるため、ポイントではないジオメトリ間の距離は不正確になります。これらはジオメトリのバウンディングボックス間の距離になります。

ここでのキッカーは、KNNアプローチ、

  1. ではありませんWHERE句を使用してクエリを距離に制限する必要があります
  2. しないすべてのポイント間のすべての距離を計算しますか
  3. インデックス上の最も近いポイントを見つけることができます。

この質問は、具体的には、ジョブが完了する方法についてです。 同じ結果が得られることに気づきました。各ポイントからすべてのotherポイント*までの距離を計算することにより、かなりの作業でORDERing、およびLIMITing。

5
Evan Carroll

要するに、MySQLもMariaDBもそうではありません。それらはRツリーを使用するので、実装するのは不可能に思えません。どちらのバグトラッカーでも、この機能のリクエストを見たことがありません。

3
danblack