<div>I'm trying to use Postgis 2.0 new function <-> (<a href="http://postgis.refractions.net/docs/geometry_distance_centroid.html">Geometry Distance Centroid</a>) in order to calculate, for each row of my table (cosn1), the distance to the nearest polygon of the same class.</div>
<div><br></div><div>I was trying to use the following code:</div><div><br></div><div><div>WITH index_query AS (</div><div>  SELECT g1.gid As ref_gid, ST_Distance(g1.the_geom,g2.the_geom) As ENN    </div><div><span class="Apple-tab-span" style="white-space:pre">             </span>FROM "cosn1" As g1, "cosn1" As g2   </div>
<div><span class="Apple-tab-span" style="white-space:pre">              </span>WHERE g1.gid <> g2.gid AND g1.class = g2.class</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>ORDER BY g1.gid, g1.the_geom <-> g2.the_geom) </div>
<div>  SELECT DISTINCT ON (ref_gid) ref_gid, ENN </div><div>  <span class="Apple-tab-span" style="white-space:pre"> </span>FROM index_query</div><div>  ORDER BY ref_gid, ENN;</div></div><div><br></div><div>But then I realize the warning: </div>
<div><br></div><div><br></div><div><span style="color:rgb(46,46,46);font-family:'Lucida Grande',Verdana,Geneva,Arial,Helvetica,sans-serif;font-size:13px;text-align:-webkit-left;background-color:rgb(228,247,221)">Note: Index only kicks in if one of the geometries is a constant (not in a subquery/cte). e.g. 'SRID=3005;POINT(1011102 450541)'::geometry instead of a.geom</span>
</div><div><span style="color:rgb(46,46,46);font-family:'Lucida Grande',Verdana,Geneva,Arial,Helvetica,sans-serif;font-size:13px;text-align:-webkit-left;background-color:rgb(228,247,221)"><br></span></div><div>Meaning that the Index wont be used at all, and the query will take almost the same time as before using:</div>
<div><br></div><div><div>SELECT DISTINCT ON(g1.gid)  g1.gid As ref_gid, ST_Distance(g1.the_geom,g2.the_geom) As ENN    </div><div><span class="Apple-tab-span" style="white-space:pre">             </span>FROM "cosn1" As g1, "cosn1" As g2   </div>
<div><span class="Apple-tab-span" style="white-space:pre">              </span>WHERE g1.gid <> g2.gid AND g1.class = g2.class</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>ORDER BY g1.gid, ST_Distance(g1.the_geom,g2.the_geom)</div>
</div><div><br></div><div>Can anyone point me a workaround that allows me to improve performance of my query?
</div><div><br></div><div>Thank you very much.</div><div><br></div><div>Alexandre Neto</div><div><br></div><div><br></div><div style="text-align:-webkit-left"><font color="#2e2e2e" face="'Lucida Grande', Verdana, Geneva, Arial, Helvetica, sans-serif"><br>
</font></div><div><br></div>