[postgis-users] GIST Index performance
Paul Ramsey
pramsey at refractions.net
Mon Nov 29 20:39:03 PST 2004
Ken,
What is the contents of "geometry_columns". Do you have some stats
columns? Are they full of histogram goodness? What is your pgsql
version, your postgis version?
P
On 29-Nov-04, at 6:15 PM, ken wrote:
> Hi all,
>
> I've got a simple problem with indexing that I can't seem to overcome.
>
> I've got a table that looks like the following (Note: I am not
> displaying all of the columns, just the ones involved in this query for
> simplification)...
>
> nrgdb=# \d nrgfeature
> Table "public.nrgfeature"
> Column | Type | Modifiers
> ----------------+-----------------------------+-----------
> fid1 | bigint | not null
> fid2 | bigint | not null
> featuretypeid | smallint | not null
> diagonalsize | double precision |
> boundinggeom | geometry |
> layerid | integer |
> Indexes:
> "nrgfeature_fid_index" unique, btree (fid2, fid1)
> "nrgfeature_boundinggeom_idx" gist (boundinggeom)
> "nrgfeature_diag_idx" btree (diagonalsize)
> "nrgfeature_ft_index" btree (featuretypeid)
> "nrgfeature_layer" btree (layerid)
>
>
> ... which uses a gist index on the boundinggeom column. The table has
> almost 1.5 million rows (1453286 to be exact).
>
> If I run a query on the boundinggeom that intersects all of the rows in
> the table, postgres still chooses the gist index (even though all rows
> match!) and not another index instead and the query is really, really
> slow. If it were instead to use another index the query would be fine.
> Here is the query I am doing ...
>
> nrgdb=# explain
> nrgdb-# analyze
> nrgdb-# SELECT *
> nrgdb-# FROM nrgfeature
> nrgdb-# WHERE boundinggeom && GeometryFromText('BOX3D(759869.7916666667
> 646875.0, 200130.2083333333 303125.0)', -1)
> nrgdb-# AND diagonalSize > 2291.666666666667
> nrgdb-# ;
>
> QUERY PLAN
> -----------------------------------------------------------------------
> -----------------------------------------------------------------------
> ------------------------
> Index Scan using nrgfeature_boundinggeom_idx on nrgfeature
> (cost=0.00..31.18 rows=1 width=596) (actual time=1329.945..562438.980
> rows=4422 loops=1)
> Index Cond: (boundinggeom && 'SRID=-1;BOX3D(200130.208333333 303125
> 0,759869.791666667 646875 0)'::geometry)
> Filter: ((diagonalsize > 2291.66666666667::double precision) AND
> (boundinggeom && 'SRID=-1;BOX3D(200130.208333333 303125
> 0,759869.791666667 646875 0)'::geometry))
> Total runtime: 562476.459 ms
> (4 rows)
>
> ... As you can see it thinks only one row would be returned and yet
> 4422
> rows are returned. All of these rows are satisfied by the diagonalsize
> condition alone and if we take out the boundinggeom condition we get
> exactly what we want in this case and we get it immediately. Of
> course,
> we can't take out the condition in the general case.
>
> I have set the statistics to 100 for both the columns diagonalsize and
> boundinggeom (does that even work for a gist index?), revacuumed full
> analyze the table, and rerun SELECT UPDATE_GEOMETRY_STATS(). This has
> not helped.
>
> Thanks for any assistance you can provide.
>
> Ken
> --
> ------s----a----m----s----i----x----e----d----d------
> --
>
> Ken Southerland
> Senior Consultant
> Sam Six EDD
> http://www.samsixedd.com
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list