[postgis-users] Increase KNN efficiency
Nicolas Ribot
nicolas.ribot at gmail.com
Thu May 31 01:46:48 PDT 2018
Hi,
Put the KNN operator in a LATERAL subquery, using LIMIT x to limit NN to x
elements:
SELECT
p1.id,
t.id AS id2,
t.dist
FROM parc p1
CROSS JOIN LATERAL
(SELECT
p2.id,
st_distance(p1.geom, p2.geom) AS dist
FROM parc p2
WHERE p1.id <> p2.id
ORDER BY p1.geom <-> p2.geom
LIMIT 1) AS t
ORDER BY p1.id, t.dist;
Nicolas
On 30 May 2018 at 23:07, Vispo Leblanc <vispoleblanc at gmail.com> wrote:
> Hello PostGIS users,
>
> I am looking for a way to increase the speed of my query with KNN.
>
> 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.
>
> I wrote the following query:
>
> WITH index_query as (
> SELECT
> t1.id,
> t1.geom AS geom,
> t2.geom AS geom2,
> t1.geom <-> t2.geom AS distance
> FROM research_scrapper.table1 t1,
> research_scrapper.table2 t2
> ORDER BY t1.geom <-> t2.geom
> )
> SELECT tbl.cas_id, tbl.geom
> FROM index_query tbl
> INNER JOIN
> (
> SELECT geom2,
> MIN(distance) as distance
> FROM index_query
> GROUP BY geom2
> )tbl1
> ON tbl1.geom_generated=tbl.geom_generated
> AND tbl1.distance = tbl.distance
>
> This is taking forever, would you have any suggestions on how to increase
> the efficiency?
>
> Thanks for your help,
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/postgis-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20180531/e9492766/attachment.html>
More information about the postgis-users
mailing list