<div dir="ltr"><div>Thanks Nicolas, this is <u><b>way better</b></u>, I guess my previous query was calculating all distance between all elements. <br></div><div><br></div><div>Thanks again! <br></div><br><div class="gmail_quote"><div dir="ltr">On Thu, May 31, 2018 at 2:47 AM Nicolas Ribot <<a href="mailto:nicolas.ribot@gmail.com">nicolas.ribot@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">Hi,<div><br></div><div>Put the KNN operator in a LATERAL subquery, using LIMIT x to limit NN to x elements:</div><div><br></div><div><div>SELECT</div><div> <a href="http://p1.id" target="_blank">p1.id</a>,</div><div> <a href="http://t.id" target="_blank">t.id</a> AS id2,</div><div> t.dist</div><div>FROM parc p1</div><div> CROSS JOIN LATERAL</div><div> (SELECT</div><div> <a href="http://p2.id" target="_blank">p2.id</a>,</div><div> st_distance(p1.geom, p2.geom) AS dist</div><div> FROM parc p2</div><div> WHERE <a href="http://p1.id" target="_blank">p1.id</a> <> <a href="http://p2.id" target="_blank">p2.id</a></div><div> ORDER BY p1.geom <-> p2.geom</div><div> LIMIT 1) AS t</div><div>ORDER BY <a href="http://p1.id" target="_blank">p1.id</a>, t.dist;</div></div><div><br></div><div>Nicolas</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 30 May 2018 at 23:07, Vispo Leblanc <span dir="ltr"><<a href="mailto:vispoleblanc@gmail.com" target="_blank">vispoleblanc@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hello PostGIS users, <br></div><div><br></div><div>I am looking for a way to increase the speed of my query with KNN. <br></div><div><br></div><div>I have two tables with millions of points in each table. I would like to find the nearest neighbor (only one) of my points in table A with my points in table B.</div><div><br></div><div>I wrote the following query: <br></div><div><br></div><div>WITH index_query as (<br> SELECT<br> <a href="http://t1.id" target="_blank">t1.id</a>,<br> t1.geom AS geom,<br> t2.geom AS geom2, <br> t1.geom <-> t2.geom AS distance<br> FROM research_scrapper.table1 t1, <br> research_scrapper.table2 t2<br> ORDER BY t1.geom <-> t2.geom<br>)<br>SELECT tbl.cas_id, tbl.geom <br>FROM index_query tbl<br>INNER JOIN<br> (<br> SELECT geom2, <br> MIN(distance) as distance<br> FROM index_query <br> GROUP BY geom2<br> )tbl1<br> ON tbl1.geom_generated=tbl.geom_generated<br> AND tbl1.distance = tbl.distance<br></div><div><br></div><div>This is taking forever, would you have any suggestions on how to increase the efficiency?</div><div><br></div><div>Thanks for your help,</div><div><br></div></div>
<br>_______________________________________________<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><br></blockquote></div><br></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></div>