<div dir="ltr"><div dir="ltr">Try the solution outlined here:<div><br></div><div><a href="https://gis.stackexchange.com/questions/31310/acquiring-arcgis-like-speed-in-postgis">https://gis.stackexchange.com/questions/31310/acquiring-arcgis-like-speed-in-postgis</a><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Sun, Dec 2, 2018 at 10:44 AM Paul van der Linden <<a href="mailto:paul.doskabouter@gmail.com">paul.doskabouter@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-size:small">As I am working with large polygons, I'm always struggling with performance, and trying to find ways to improve them.</div><div class="gmail_default" style="font-size:small">F.e. I have lots of queries like:</div><div class="gmail_default" style="font-size:small">SELECT ST_Intersection(table1.geom,table2.geom) <br></div><div class="gmail_default" style="font-size:small">FROM table1</div><div class="gmail_default" style="font-size:small">JOIN table2 on ST_Intersects(table1.geom,table2.geom)</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">In case of large polygons this is sometimes a bottleneck, and I have the following suggestion:</div><div class="gmail_default" style="font-size:small">Create a function which returns the relation between 2 polygons (within, intersects or disjunct) so that I can do the following:</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">
<div class="gmail_default" style="font-size:small">SELECT <br></div><div class="gmail_default" style="font-size:small">  CASE</div><div class="gmail_default" style="font-size:small">     WHEN 
ST_Relate(table1.geom,table2.geom)=intersects THEN ST_Intersection(table1.geom,table2.geom) <br></div><div class="gmail_default" style="font-size:small">     ELSE table1.geom</div><div class="gmail_default" style="font-size:small">  END<br></div><div class="gmail_default" style="font-size:small">FROM table1</div><div class="gmail_default" style="font-size:small">JOIN table2 on ST_Relate(table1.geom,table2.geom) IN (intersects,within)<br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">or (because 
ST_Relate is calculated twice in previous query):</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">
<div class="gmail_default" style="font-size:small">SELECT <br></div><div class="gmail_default" style="font-size:small">  CASE</div><div class="gmail_default" style="font-size:small">     WHEN relate=intersects THEN ST_Intersection(t1geom,t2geom) <br></div><div class="gmail_default" style="font-size:small">     ELSE t1geom</div><div class="gmail_default" style="font-size:small">  END</div><div class="gmail_default" style="font-size:small">FROM (<br></div><div class="gmail_default" style="font-size:small">  SELECT ST_Relate(table1.geom,table2.geom) as relate,table1.geom AS t1geom,table2.geom AS t2geom FROM table1</div><div class="gmail_default" style="font-size:small">  JOIN table2 on table1.geom && table2.geom</div><div class="gmail_default" style="font-size:small">) AS allpolies</div><div class="gmail_default" style="font-size:small">WHERE relate IN 
(intersects,within)

</div><div class="gmail_default" style="font-size:small"><br></div>

</div>

</div></div>
_______________________________________________<br>
postgis-users mailing list<br>
<a href="mailto:postgis-users@lists.osgeo.org" target="_blank">postgis-users@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/postgis-users</a></blockquote></div>