[GRASS-dev] About v.distance, v.what.vect (wrt "count points within...").

Nikos Alexandris nikos.alexandris at felis.uni-freiburg.de
Thu Aug 12 01:20:02 EDT 2010


Moritz L:

> As a final (at least for today ;-) )follow-up, just for the record:
 
On 11/08/10 13:42, Moritz L:

> > Then testing the idea from the link Markus N added to your bug report:

> > time v.db.update mygrid col=count value="(SELECT count(*) from mypoints
> > WHERE mygrid.cat=mypoints.cat_municip group by cat_municip)"

> > real 5m28.312s
 
> And to show the magic of database indices:

so, this is an "extra" step? i.e. not done by grass' modules.
 
> time echo "create index mypoints_cat_municip on mypoints (cat_municip)"
> 
> | db.execute  && time v.db.update mygrid col=count value="(SELECT
> 
> count(*) from mypoints WHERE mygrid.cat=mypoints.cat_municip group by
> cat_municip)"
> 
> real	0m10.113s
> user	0m6.320s
> sys	0m1.300s
> 
> real	0m0.668s
> user	0m0.544s
> sys	0m0.124s
> 
> And, very interestingly, the difference of behaviour of the different db
> backends (previous examples were all with SQLite, the following is with
> PostgreSQL):
> 
> time echo "create index mypoints_cat_municip on mypoints_pg
> (cat_municip)" | db.execute  && time v.db.update mygrid_pg col=count
> value="(SELECT count(*) from mypoints_pg WHERE
> mygrid_pg.cat=mypoints_pg.cat_municip group by cat_municip)"
> 
> real	0m2.905s
> user	0m0.012s
> sys	0m0.004s
> 
> real	0m7.948s
> user	0m0.228s
> sys	0m0.128s
> 
> So, SQLite takes lot's of time creating the index and then is very fast
> for the update, and the opposite is true for PostgreSQL. Don't know if
> that's anything we can do something about in GRASS...

This is very interesting, indeed.
Nikos


More information about the grass-dev mailing list