banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oubliĂ© ?

#1 Tue 29 June 2021 12:58

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 1044

Spatialite : performance d'une jointure spatiale

Salut Ă  tous,
Je fais, dans une BD Spatialite, des stats de points (180 000) qui intersectent 2 couches de polygones (env 2000 entités chacune).

Ma requĂȘte s’exĂ©cute en 20 min, mais comme je modifie les donnĂ©es et que je la relance souvent, je voudrais optimiser, si possible, le temps de calcul.

Voici un extrait de la requĂȘte :

Code:

SELECT    count(tpts.id) nbpts,
        avg(tpts.champ) as champ_moyenne,
        ...
FROM    table_polygones1 tplg1
LEFT JOIN    table_points tpts ON ST_Intersects(tplg1.geom, tpts.geom)
LEFT JOIN    table_polygones2 tplg2 ON ST_Intersects(tpts.geom, tplg2.geom)

Toutes mes tables ont un index spatial (créé via SELECT CreateSpatialIndex('table', 'geom'); )

Pensez-vous possible d'optimiser la jointure spatiale entre les tables ?

J'ai pas encore bien assimilé les notions/possibilités de RTreeIntersects() : ça vaut le coup que je creuse de ce cÎté là selon vous ?

Dernière modification par Sylvain M. (Tue 29 June 2021 12:59)


Sylvain M.

Hors ligne

 

#2 Tue 29 June 2021 23:43

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1226

Re: Spatialite : performance d'une jointure spatiale

Salut,

si j'ai bien compris ce que vous voulez faire avec votre requĂȘte,
peut ĂȘtre que vous gagnerez du temps comme ceci :

Code:

SELECT
   *
FROM
   (SELECT
        tpts.id,
        count(tpts.id) nbpts,
        avg(tpts.champ) as champ_moyenne,
     FROM
       table_points tpts
    JOIN  
         table_polygones1  tplg1
    ON 
         ST_Intersects(tplg1.geom, tpts.geom)
     ) t1
JOIN
   (SELECT
        tpts.id,
        count(tpts.id) nbpts,
        avg(tpts.champ) as champ_moyenne,
     FROM
       table_points tpts
    JOIN  
         table_polygones2  tplg2
    ON 
         ST_Intersects(tplg2.geom, tpts.geom)
     ) t2  
ON
   t1.id = t2.id
.
.
.
.

L'idée étant de réduire le nombre de combinaison.

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo