newly minted PostGIS 3 / PostgreSQL 12 / GEOS 3.8 combo
PostgreSQL 12.0 (Ubuntu 12.0-2.pgdg18.04+1) on x86_64-pc-linux-gnu Ubuntu linux 4.15 x86_64 i7-2600 CPU @ 3.40GHz shared_buffers = 4096MB work_mem=128MB PostGIS 3.0.0 r17983; Proj 4.9.3 database geom 2D POLYGON valid,simple,4326 3.1million rows * all times in milliseconds, lower is better -- GEOS 3.7.1 postgresql-12-postgis-3_3.0.0+dfsg-2~exp1.pgdg18.04+1_amd64.deb ST_IsValid(geom) 22023 21968 21976 21952 ST_PointOnSurface(geom) 53880 53668 53918 ST_Centroid(geom) 4610 4383 4384 ST_Buffer( geom,0.001) 98284 98111 ST_Union( geom, ST_Buffer(geom,0.001)) 151677 151452 -- GEOS 3.8.1 r93be2e1d; RelWithDebInfo ST_IsValid(geom) 13761 13698 13734 13672 ST_PointOnSurface(geom) 4010 3929 3943 ST_Centroid(geom) 4106 4015 4018 ST_Buffer( geom,0.001) 68152 68387 ST_Union( geom, ST_Buffer(geom,0.001)) 109546 109829
note: the graphic here shows only relative time between two runs
of the same operators, not absolute time between operators..
Compared to PostgreSQL 10 / PostGIS 2.4 / GEOS 3.6.2 only two years ago;
big evolution forward on several fronts.
Benchmarks v2 — New Data Sets
* sparcels 450,000 rows, including ~1000 invalids by PostGIS definitions, mostly single ring (190MB)
* cpad19a 72,000 rows with a diverse range of area, vertice count and interior ring count (100MB)
* post_osm_bldgs 25,800 rows of recent OpenStreetmap 2D polygons marked as “building” of some kind
postgresql 10+190ubuntu0.1; postgis 2.5.2+dfsg-1~bionic1 pg_workers enabled; 4GB shared_mem sparcels cpad osm IsValid 3.7.1 5274 5518 311 3.8.0 2768 3669 210 3.9dev 2551 1200 172 3.10.1 800 PointOnSurface where IsValid 3.7.1 21627 11174 1189 3.8.0 4134 5526 271 3.9dev 3659 1476 269 3.10.1 1037 Centroid where IsValid 3.7.1 6352 6289 311 3.8.0 3978 5857 279 3.9dev 3383 1396 256 3.10.1 1055 Buffer where IsValid 3.7.1 21138 52019 1341 3.8.0 16711 30226 1097 3.9dev 15699 27468 1045 3.10.1 26226 Union(Buffer) where IsValid 3.7.1 36636 57707 2155 3.8.0 27883 35749 1721 3.9dev 26818 29314 1653 3.10.1 26226 * all times in milliseconds; lower is better