[OSM-dev-fr] Osm2pgsql schema : renverser planet_osm_rels

Vincent de Chateau-Thierry vdct at laposte.net
Lun 16 Avr 10:24:14 BST 2012


Bonjour,

> De : "sly (sylvain letuffe)" 

>
> J'ai peur que ma réponse puisse tomber tout à fait à coté de la plaque, mais 
> histoire que tu te sentes soutenu dans ton problème ;-)
> 
> Perso, j'ai un peu peur de cette condition :
> 
> > WHERE
> > b.osm_id = ANY(planet_osm_rels.parts);
> 
> Non pas que je vois une meilleure idée, mais j'ai peur que ça n'utilise aucun 
> index et que ça oblige postgresql à la résoudre en séquenciel, et séquenciel, 
> ça peut vouloir dire beaucoup
> 
> 
> > Celà prend énormément de temps (au moins > 1heure), alors que dans ma
> > base des pistes de ski je n'ai que 3319 relations et 67235 ways.
> > 
> > Celà ne me semble pas si complexe ??
> 
> ça peut faire 3319 * 67235 boucles (sachant que planet_osm_rels.parts c'est 
> déjà un tableau à parcourir !)
> 
> Tu peux tenter la même requete mais avec un EXPLAIN devant ?
> genre :
> explain select * from bidule;
> 
> ça te donnera le "plan de résolution" de ta requête (nombre de boucles, 
> indexes utilisés, etc.)
> 

J'utilise un autre moyen (je ne dis pas qu'il est propre !) avec "array_to_string" :
http://www.postgresql.org/docs/9.1/static/functions-array.html

SELECT (...)
WHERE '#'||array_to_string(planet_osm_rels.parts,'#')||'#' like 
'%#'||b.osm_id::char||'#%' 

Sur des petits jeux de données, c'est immédiat. À voir chez toi.

vincent

Une messagerie gratuite, garantie à vie et des services en plus, ça vous tente ?
Je crée ma boîte mail www.laposte.net



Plus d'informations sur la liste de diffusion dev-fr