#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

