#1 Tue 29 June 2021 12:58
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
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: 1160
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