[postgis-users] Can I build an index on combined non-spatial&spatial columns?

M.A. (Thijs) van den Berg thijs at sitmo.com
Wed Mar 18 05:08:22 PDT 2009


Thanks, that's true. I think the performance benefit with be good  
because I have approx 10.000 building_type's (although, that's a lot  
of indices to choose between). A typical distance query for a specific  
building_type will result in 10-100 matches. Not using partial  
indexing will thus result in appox 500.000  rows for each query (all  
building types), which I would then have to filter on building_type,  
reducing the resultset with a factor 10.000

Giving it some more thought, I think splitting the building table into  
individual building_type tables (and attaching spatial indices to  
those) might be the best solution.

 From a technical point, I think the postgresql CREATE INDEX should  
support multiple USING to allow for mixed patial / non-spatial  
indices, something like this:

CREATE INDEX blabla ON buildings (USING HASH(building_type), USING  
GIST(the_geom))

internally that could be rewritten as
CREATE INDEX blabla_hash_value1 ON buildings USING GIST(the_geom)  
WHERE hash(building_type)=value1
CREATE INDEX blabla_hash_value2 ON buildings USING GIST(the_geom)  
WHERE hash(building_type)=value2
..


On Mar 18, 2009, at 12:43 PM, Kemal Bayram wrote:

> Well according to EXPLAIN a partial index is taken into account, how  
> much of
> a performance benefit you gain ultimately depends on how many  
> records lie
> within your average distance.
>
> If your data set is relatively static you may also want to consider
> clustering your table too.
>
>> -----Original Message-----
>> From: postgis-users-bounces at postgis.refractions.net
>> [mailto:postgis-users-bounces at postgis.refractions.net] On
>> Behalf Of M.A. (Thijs) van den Berg
>> Sent: 18 March 2009 13:00
>> To: PostGIS Users Discussion
>> Subject: Re: [postgis-users] Can I build an index on combined
>> non-spatial&spatial columns?
>>
>> Thanks :)
>>
>> Does PostGIS support partial indices?
>> http://www.postgresql.org/docs/8.3/interactive/indexes-partial.html
>>
>> If so.. I could do something like this:
>>
>> CREATE INDEX building_type_spindx_school ON buildings USING
>> GIST(the_geom) WHERE building_type='School';
>>
>> CREATE INDEX building_type_spindx_bar
>> ON buildings
>> USING GIST(the_geom)
>> WHERE building_type='Bar';
>>
>> ...
>> Yet another option would be to partition the buildings table
>> into child tables per building_type (ie have child table
>> containing all the schools, another child table having all
>> the bars), and have individua spatial indices on the child
>> tables. Is that an option?
>>
>>
>>
>>
>> On Mar 18, 2009, at 11:36 AM, Kemal Bayram wrote:
>>
>>> I don't know about combining indexes but you want to
>> include a spatial
>>> operator such as && in addition to Distance so that you can take
>>> advantage of an index on "the_geom".
>>>
>>>> -----Original Message-----
>>>> From: postgis-users-bounces at postgis.refractions.net
>>>> [mailto:postgis-users-bounces at postgis.refractions.net] On
>> Behalf Of
>>>> M.A. (Thijs) van den Berg
>>>> Sent: 18 March 2009 11:57
>>>> To: postgis-users at postgis.refractions.net
>>>> Subject: [postgis-users] Can I build an index on combined
>> non-spatial
>>>> &spatial columns?
>>>>
>>>> Suppose I want to speedup the following  type of queries with an
>>>> index:
>>>>
>>>> SELECT the_geom, building_name
>>>> FROM buildings
>>>> WHERE Distance(the_geom, 'POINT(100312 102312)') < 5000  AND
>>>> building_type = 'School'
>>>>
>>>> Is that possible, and if not, why not? My current option
>> is to write
>>>> my own index storage in C++, using a hashmap to filter
>> building_type,
>>>> and build separate spatial indices for each building type.
>> Can I do
>>>> something similar in postgresql?
>>>> Would my only option be to split the building_types into separate
>>>> tables?
>>>> _______________________________________________
>>>> 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
>>
>
>
> _______________________________________________
> 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