Я пытаюсь использовать новую функцию Postgis 2.0 <-> (Geroidry Distance Centroid), чтобы вычислить для каждой строки моей таблицы (cosn1) расстояние до ближайшего многоугольника того же класса.
Я пытался использовать следующий код:
WITH index_query AS (
SELECT g1.gid As ref_gid, ST_Distance(g1.the_geom,g2.the_geom) As ENN
FROM "cosn1" As g1, "cosn1" As g2
WHERE g1.gid <> g2.gid AND g1.class = g2.class
ORDER BY g1.gid, g1.the_geom <-> g2.the_geom)
SELECT DISTINCT ON (ref_gid) ref_gid, ENN
FROM index_query
ORDER BY ref_gid, ENN;
Но потом я понимаю предупреждение:
Примечание. Индекс включается только в том случае, если одна из геометрий является константой (не в подзапросе / cte). например, 'SRID = 3005; POINT (1011102 450541)' :: геометрия вместо a.geom
Это означает, что индекс не будет использоваться вообще, и запрос будет занимать почти то же время, что и перед использованием:
SELECT DISTINCT ON(g1.gid) g1.gid As ref_gid, ST_Distance(g1.the_geom,g2.the_geom) As ENN
FROM "cosn1" As g1, "cosn1" As g2
WHERE g1.gid <> g2.gid AND g1.class = g2.class
ORDER BY g1.gid, ST_Distance(g1.the_geom,g2.the_geom)
Может кто-нибудь указать мне обходной путь, который позволяет мне улучшить производительность моего запроса?
Большое спасибо.