Page 1 sur 1

Problème de performances avec PostgreSQL 14 sur des requêtes géospatiales

Publié : ven. juil. 04, 2025 1:03 pm
par sandra1960
Bonjour, je galère avec PostGIS sur une requête qui cherche des points dans un rayon de 50km. La table a 3M d'entrées avec un index GIST. EXPLAIN montre un seq scan au lieu d'utiliser l'index... Des idées ?

Re: Problème de performances avec PostgreSQL 14 sur des requêtes géospatiales

Publié : ven. juil. 04, 2025 3:03 pm
par mehdi2001
As-tu bien fait un VACUUM ANALYZE récemment ? Et vérifié que ta config mémoire est correcte (work_mem, shared_buffers) ? J'ai eu le même souci sur une appli de livraison.

Re: Problème de performances avec PostgreSQL 14 sur des requêtes géospatiales

Publié : ven. juil. 04, 2025 4:03 pm
par le_julie
Poste ton EXPLAIN complet. Souvent le problème vient d'une condition WHERE mal écrite. Utilises-tu ST_DWithin() ou une bbox ?

Re: Problème de performances avec PostgreSQL 14 sur des requêtes géospatiales

Publié : ven. juil. 04, 2025 8:03 pm
par sandra1960
Voici l'EXPLAIN :
```
Gather (cost=1000.00..1254783.67 rows=1 width=32)
-> Parallel Seq Scan (cost=0.00..1253783.57 rows=1 width=32)
Filter: (st_distance(geom, '010100...'::geometry) < 50000)
```
Je n'ai pas fait de VACUUM depuis 1 mois...

Re: Problème de performances avec PostgreSQL 14 sur des requêtes géospatiales

Publié : ven. juil. 04, 2025 9:03 pm
par le_julie
Ah ! C'est ça ton problème. st_distance() ne peut pas utiliser l'index. Remplace par ST_DWithin(geom, point, 50000) et tu verras l'index s'utiliser. Et fais un VACUUM ANALYZE d'urgence !

Re: Problème de performances avec PostgreSQL 14 sur des requêtes géospatiales

Publié : sam. juil. 05, 2025 3:03 am
par sandra1960
Merci ! Avec ST_DWithin c'est passé de 12s à 80ms. Je me sens bête... Pourquoi cette différence ?

Re: Problème de performances avec PostgreSQL 14 sur des requêtes géospatiales

Publié : sam. juil. 05, 2025 6:03 am
par mehdi2001
ST_DWithin utilise directement la bbox pour filtrer en premier. st_distance calcule la distance exacte pour TOUS les points avant de filtrer. Classique ;)