[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