Próbuję użyć nowej funkcji Postgis 2.0 <-> (Centroid Distance Geometry), aby obliczyć dla każdego wiersza mojej tabeli (cosn1) odległość do najbliższego wielokąta tej samej klasy.
Próbowałem użyć następującego kodu:
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;
Ale wtedy zdaję sobie sprawę z ostrzeżeniem:
Uwaga: Indeks jest uruchamiany tylko wtedy, gdy jedna z geometrii jest stała (nie w podzapytaniu / cte). np. „SRID = 3005; POINT (1011102 450541)” :: geometria zamiast a.geom
Oznacza to, że Indeks w ogóle nie będzie używany, a zapytanie zajmie prawie taki sam czas, jak przed użyciem:
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)
Czy ktoś może wskazać mi obejście, które pozwala mi poprawić wydajność mojego zapytania?
Dziękuję Ci bardzo.