<div dir="ltr">I have two tables both which have a gemo_4326 columns with a GIST index.<div><ul><li>gis.parcels (approximately 1 million records)<br></li><li>gis.layers (approximately 1 thousand records)<br></li></ul><div>The gis.layers table has large multipolygons that can include thousands of gis.parcel intersects. When I run ST_Intersects from a gis.parcel row to gis.layers the query is pretty quick (sub 100 ms). When I run an ST_Intersects on a large multipolygon from gis.layers to gis.parcels to find which parcels intersect with the gis.layer, the queries can take upwards of 10 minutes.<br></div></div><div><br></div><div>Here's my query:</div><div><br></div><div><div><div>SELECT DISTINCT</div><div><span class="" style="white-space:pre">      </span>parcel.apn</div><div>FROM </div><div><span class="" style="white-space:pre">    </span>gis.parcels as parcel, </div><div><span class="" style="white-space:pre">   </span>gis.layers as layer </div><div>WHERE </div><div><span class="" style="white-space:pre">        </span><a href="http://layer.id">layer.id</a> = 339 AND </div><div><span class="" style="white-space:pre">   </span>ST_Intersects(layer.geom_4326, parcel.geom_4326);</div></div></div><div><br><div>Two questions:</div><div><ul><li>How can I improve performance on the ST_Intersects from gis.layers -> gis.parcels?</li><li>I'm considering caching the results in a Materialized View, but based on the current performance this would take a couple days. Is there an alternative approach for caching the results?</li></ul></div><div><br></div><div>-- <br><div class="gmail_signature">Alexander W. Rolek<br><br></div>
</div></div></div>