[OSM-dev] C++ implementation of the API
Steven te Brinke
s.tebrinke at student.utwente.nl
Fri May 30 12:37:57 BST 2008
The second query uses a join only to select the correct values, not
because you really want to join the tables. I think that you can achieve
the same by a query like this:
SELECT *
FROM current_war_tags
WHERE id IN (
SELECT *
FROM current_ways
WHERE tile IN (...)
AND latitude BETWEEN ... AND ...
AND longitude BETWEEN ... AND ...
)
ORDER BY id;
However, I do not know how the db handles subqueries. Thus, I am not
sure if the performance of this query is better. But it seems to be a
more logical way than using a join. (I am not very sure if using
subqueries works at all, because I know some dbs have problems with that.)
It might be worth trying.
Steven
Tom Hughes schreef:
> You will get some duplication, yes. How much that matters will be
> down to profiling as you say.
>
> The other option is to run two queries in parallel:
>
> SELECT *
> FROM current_ways
> WHERE tile IN (...)
> AND latitude BETWEEN ... AND ...
> AND longitude BETWEEN ... AND ...
> ORDER BY id;
>
> and:
>
> SELECT cwt.*
> FROM current_way_tags cwt
> INNER JOIN current_ways cw ON cwt.id = cw.id
> WHERE cw.tile IN (...)
> AND cw.latitude BETWEEN ... AND ...
> AND cw.longitude BETWEEN ... AND ...
> ORDER BY cwt.id
>
> then read both result sets at the same time and match them up.
>
> Tom
>
More information about the dev
mailing list