[postgis-devel] Postgis topology creation - O(n-squared)? - creates problems with large datasets.

Sandro Santilli strk at keybit.net
Mon Jan 13 13:14:43 PST 2014


On Mon, Jan 13, 2014 at 10:11:48PM +0100, Sandro Santilli wrote:

> These are the function that are run for insertion of a _single_ polygon when
> the topology already contains 165000 faces.
> 
> -- Ordered by "self_time":
> strk=# select * from pg_stat_user_functions order by self_time desc;
> 
>  funcid | schemaname |        funcname         | calls  | total_time | self_time
> --------+------------+-------------------------+--------+------------+-----------
>   62973 | topology   | _st_addfacesplit        |      2 |    424.356 |    192.07
>   52356 | public     | st_lineinterpolatepoint | 165013 |    136.911 |   136.911
>   52097 | public     | geometry_overlaps       | 165015 |     92.684 |    92.684
>   54503 | topology   | st_addedgemodface       |      1 |    438.418 |    13.539
>   54508 | topology   | st_addisonode           |      1 |       7.39 |     7.359
>   54491 | topology   | getringedges            |      2 |      2.552 |     2.552
>   54533 | topology   | topogeo_addlinestring   |      1 |    450.942 |     2.385
>   54534 | topology   | topogeo_addpoint        |      2 |      9.287 |     1.837
> 
> Interesting enough, "geometry_overlaps" and "st_lineinterpolatepoint" are called
> once for each and every already-loaded geometry, which suggests there's indeed a
> problem with index usage. The "geometry_overlaps" function is the one that
> implements operator&&, supposedly an index user!

Another interesting information is that the _second_time_ you pass the same
input to TopoGeo_addPolygon, "geometry_overlaps" gets called 9 times only,
which is more like the expected number out of an index filter...

--strk;

 ()  ASCII ribbon campaign        - against html e-mail
 /\  http://www.asciiribbon.org   - against proprietary attachments



More information about the postgis-devel mailing list