K -Запрос ближайшего соседа в PostGIS

Я использую следующий запрос ближайшего соседа в 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;

Теперь, когда я создал индексы для _geom, а также столбец gid для обеих таблиц, этот запрос занимает гораздо больше времени, чем другие пространственные запросы, включающие пространственные соединения ч/б двух таблиц.

Есть ли лучший способ найти K -ближайших соседей? Я использую ПостГИС.

И еще один запрос, который занимает необычно много времени, несмотря на создание индексов для столбца геометрии,:

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

возвращает результат через некоторое время, несмотря на использование таблицы «дороги», которая намного больше, чем таблица полигонов или точек, а также включает более сложные пространственные операторы.

12
задан Erwin Brandstetter 5 May 2012 в 13:55
поделиться