[postgis-users] GIST index statistics

Paul Ramsey pramsey at refractions.net
Wed Jul 28 15:06:00 PDT 2004


Spatial index selectivity is a special beast, and has not been  
implemented for the built-in rtrees.  Could be done, just hasn't been  
done.

On Wednesday, July 28, 2004, at 01:09 PM, ken wrote:

> On Wed, 2004-07-28 at 12:00, David Blasby wrote:
>> Did you compile with USE_STATS=1 and then do a
>>
>> select UPDATE_GEOMETRY_STATS();
>>
>> This will turn on the statistical analysis that usually makes the
>> query planner more rational.
>
> Wow!  That did it!  Thanks.
>
> You wouldn't happen to know if there is an equivalent little magic  
> trick
> to making rtree indices on box column types in standard postgres work
> properly?
>
> I did post the question to pgsql-performance at postgresql.org and didn't
> get a good answer.  :)
>
> Thanks again,
>
> Ken
>
>
>>
>> dave
>> ps. make sure geometry_columns has the proper entries in it.
>>
>> On Wed, 28 Jul 2004 11:37:09 -0700, ken <southerland at samsixedd.com>  
>> wrote:
>>> I just recently starting looking at postgis due to a failure in the
>>> rtree indices of postgres to handle my situation.  Unfortunately,  
>>> and I
>>> guess not surprisingly since GIST indices are built on postgres's  
>>> rtree
>>> index, I experience the same problem with postgis.
>>>
>>> I have the following table ...
>>>
>>> test=# \d gistest
>>>           Table "public.gistest"
>>>    Column    |       Type       | Modifiers
>>> --------------+------------------+-----------
>>> fid1         | numeric(64,0)    | not null
>>> fid2         | numeric(64,0)    | not null
>>> diagonalsize | double precision |
>>> geometry     | geometry         |
>>> Indexes:
>>>    "gistest_diagonalsize_idx" btree (diagonalsize)
>>>    "gistest_geometry_idx" gist (geometry)
>>> Check constraints:
>>>    "$1" CHECK (srid(geometry) = -1)
>>>    "$2" CHECK (geometrytype(geometry) = 'POLYGON'::text OR geometry  
>>> IS
>>> NULL)
>>>
>>> .... and it has 2898640 rows in it.  If I try the following query ...
>>>
>>> explain analyze SELECT *
>>> FROM gistest
>>> WHERE geometry && GeometryFromText('BOX3D(825160.2564102565
>>> 685833.3333333333, 134839.74358974356 264166.6666666666)', -1 )
>>> AND diagonalSize > 7638.888888888889;
>>>
>>> .... I get the following query plan ...
>>>
>>>                                                                       
>>>                 QUERY PLAN
>>> --------------------------------------------------------------------- 
>>> --------------------------------------------------------------------- 
>>> --------------------------------------------
>>> Index Scan using gistest_geometry_idx on gistest  (cost=0.00..60.20
>>> rows=1 width=278)
>>>   Index Cond: (geometry && 'SRID=-1;BOX3D(134839.743589744
>>> 264166.666666667 0,825160.256410256 685833.333333333 0)'::geometry)
>>>   Filter: ((diagonalsize > 7638.88888888889::double precision) AND
>>> (geometry && 'SRID=-1;BOX3D(134839.743589744 264166.666666667
>>> 0,825160.256410256 685833.333333333 0)'::geometry))
>>> (3 rows)
>>>
>>> .... despite the fact that condition on the geometry alone returns
>>> 2896058 rows or almost the entire table!  The statistics, despite a
>>> vacuum analyze on the table, suggest that only 1 row will be  
>>> returned!
>>>
>>> The diagonalsize condition alone returns only 2490 rows and therefore
>>> the query plan should use the index on this diagonalsize with a  
>>> filter
>>> based on the overlaps condition.  Yet due to the completely incorrect
>>> statistics on the geometry column it doesn't.
>>>
>>> Any ideas?
>>>
>>> Ken
>>>
>>> _______________________________________________
>>> postgis-users mailing list
>>> postgis-users at postgis.refractions.net
>>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
      Paul Ramsey
      Refractions Research
      Email: pramsey at refractions.net
      Phone: (250) 885-0632




More information about the postgis-users mailing list