Я использую следующий запрос ближайшего соседа в PostGIS:
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 в обеих таблицах, этот запрос занимает гораздо больше времени, чем другие пространственные запросы, включающие пространственное соединение ч / б двух таблиц.
Есть ли лучший способ найти 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) ;
Я считаю, что эти запросы не улучшаются с помощью основных индексов, но почему?
Тогда как этот запрос:
select a.polyid , sum(length(b.the_geom)) from polygon as a , roads as b
where st_intersects(a.the_geom , b.the_geom);
через некоторое время возвращает результат, несмотря на то, что используется таблица «дорог», которая намного больше, чем таблица полигонов или точек, а также включает более сложные пространственные операторы.
EXPLAIN ANALYZE SELECT ....
? Так мы, возможно, сможем узнать, что там происходит. - person Thilo   schedule 05.05.2012