Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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é ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Tue 29 June 2021 12:58

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

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: 1129

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

Powered by FluxBB