[postgis-users] Query performance issue
Bill Binko
bill at binko.net
Thu Oct 13 15:18:54 PDT 2005
A couple of thoughts I had right after sending...
On Thu, 13 Oct 2005, Bill Binko wrote:
>
> Ok, just to throw my hat into the ring, why don't you try separating the
> SELECT and the UPDATE.
>
> --First, CLUSTER your streets table around its GIST index:
> -- (This can take a while, but not hours)
>
> CLUSTER streets_gidx on streets;
>
> -- Second, grab the (possibly many-many) relationships
>
SELECT streets.oid as soid, prov_ab INTO TEMPORARY street_prov FROM
streets JOIN province ON (streets.the_grom && province.the_geom AND
distance(streets.the_geom, province.the_geom) <= 0);
I missed a parenthesis - it should work now. Also, you might try the
WHERE form instead of the JOIN form, as Postgresql is not always identical
in how it plans the query.
>
> -- Then, index them with both fields in the index...for fast lookup
>
> CREATE INDEX street_prov_idx ON street_prov(soid, prov_ab);
Order is very important here: don't do on street_prov(prov_ab, soid) or it
will not use the index.
>
> -- I am only taking the first one.
>
> UPDATE streets set prov = (select prov_ab from street_prov_idx where soid
> = streets.oid limit 1);
>
> If nothing else, you'd know which part of this is causing your pain.
>
> Bill
>
> PS: the CLUSTER is a good idea anyway
>
More information about the postgis-users
mailing list