PostGIS で次の Nearest Neighbor Query を使用しています。
SELECT g1.gid g2.gid FROM points as g1, polygons g2
WHERE g1.gid <> g2.gid
ORDER BY g1.gid, ST_Distance(g1.the_geom,g2.the_geom)
LIMIT k;
これで、両方のテーブルの the_geom と gid 列にインデックスを作成したので、このクエリは、2 つのテーブル間の空間結合を含む他の空間クエリよりもはるかに時間がかかります。
K最近傍を見つけるより良い方法はありますか? PostGISを使用しています。
また、ジオメトリ列にインデックスを作成しているにもかかわらず、異常に時間がかかる別のクエリは次のとおりです。
select g1.gid , g2.gid from polygons as g1 , polygons as g2
where st_area(g1.the_geom) > st_area(g2.the_geom) ;
これらのクエリは Gist インデックスの恩恵を受けていないと思いますが、なぜでしょうか?
一方、このクエリは次のとおりです。
select a.polyid , sum(length(b.the_geom)) from polygon as a , roads as b
where st_intersects(a.the_geom , b.the_geom);
ポリゴンまたはポイント テーブルよりもはるかに大きく、より複雑な空間演算子を含む「道路」テーブルが含まれているにもかかわらず、しばらくして結果を返します。