Как я могу оптимизировать этот подзапрос как соединение?

Я заметил, что выполнение этого подзапроса

SELECT ST_Area(ST_Union(ST_Transform(ST_Intersection((SELECT poly1.the_geom from poly1 WHERE poly1.polygon_type='P'),poly2.the_geom),3857)))

AS area_of_P FROM poly1, poly2

выполняется значительно медленнее, чем выполнение этого соединения

SELECT ST_AREA(ST_Union(ST_Transform(ST_Intersection(poly1.the_geom,poly2.the_geom),3857)))

AS area_of_poly

FROM poly2

LEFT JOIN poly1 on st_intersects(poly1.the_geom,poly2.the_geom)

WHERE poly2.polygon_type='P'

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

SELECT ST_Area(ST_Union(ST_Transform(ST_Intersection((SELECT poly1.the_geom from poly1 WHERE poly1.polygon_type='P'),poly2.the_geom),3857))) AS area_of_P,

ST_Area(ST_Union(ST_Transform(ST_Intersection((SELECT poly1.the_geom from poly1 WHERE poly1.polygon_type='S'),poly2.the_geom),3857))) AS area_of_S

FROM poly1, poly2

5
задан John 23 June 2012 в 08:14
поделиться