[postgis-users] Can I build an indexoncombinednon-spatial&spatial columns?
Kemal Bayram
kemal at cins.co.uk
Wed Mar 18 07:51:33 PDT 2009
Also thinking about your problem a little bit more, you could divide your
space into sub divisions giving each space a unique id. If you then assign
each building the unique id of its correspending sub division you can create
a compound index on building_type and sub_division_id. For your query you
would search on the relevant sub_division and building_type along with
distance. Depending on how equally distanced out your points are you'd
probably want to divide the more dense sub divisions into a quadtree.
> -----Original Message-----
> From: postgis-users-bounces at postgis.refractions.net
> [mailto:postgis-users-bounces at postgis.refractions.net] On
> Behalf Of Kemal Bayram
> Sent: 18 March 2009 16:36
> To: 'PostGIS Users Discussion'
> Subject: RE: [postgis-users] Can I build an
> indexoncombinednon-spatial&spatial columns?
>
> Well spatial indicies are not actually accurate because they
> use 32bit floating point and work on bounding boxes, that is
> one assumption I mistakenly made myself (should have RTFM
> properly :) So it makes sense that you can not have a compound index.
>
> > -----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 15:16
> > To: PostGIS Users Discussion
> > Subject: Re: [postgis-users] Can I build an index
> > oncombinednon-spatial&spatial columns?
> >
> > I thinks you're right about the 'too many indices' , I'm
> worried about
> > that too. I'll have to do some test's now to see what would work.
> > Thanks!
> > ..anyway, one thing I've learned is that there are no compound
> > spatial/ non-spatial indices possibilities.
> >
> >
> > On Mar 18, 2009, at 1:43 PM, Kemal Bayram wrote:
> >
> > > For what you want to do I don't think partial indexs are the the
> > > solution as you would have too many indicies. You don't want the
> > > query taking more time going through the metadata then the actual
> > > query.
> > >
> > > Postgres will use a separate index you have on building
> > type, infact
> > > if you look at EXPLAIN the best case costs are lower with
> > an index on
> > > building_type than on a partial index. And like I said if
> > performance
> > > of this query is critical you can cluster on the building_type.
> > >
> > > You really need to play around with your queries to see
> > what is best.
> > >
> > >> -----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 14:08
> > >> To: PostGIS Users Discussion
> > >> Subject: Re: [postgis-users] Can I build an index on
> > >> combinednon-spatial&spatial columns?
> > >>
> > >> 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
> > >>
> > >> _______________________________________________
> > >> 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