Hi postgis-users,

Please may I have some guidance. I have been looking in to bad row count 
estimates for a simple query, similar to the following:
    SELECT area_id FROM area WHERE ST_INTERSECTS(area.polygon, ST_MakePoint(x, 
y))

I have found that the row count estimate is always '1', even if the point 
intersects multiple geometries and the actual row count is in the thousands. Is 
this expected behaviour?

To troubleshoot, I have tried:
    1. Manually running `VACUUM ANALYZE`
    2. Ensuring that stats are returned by `__postgis_stats`
    3. Trying different but similar functions such as `ST_Contains`

I have also found that the following selectivity function returns `0` for any 
point geometry:
    `__postgis_selectivity('area', 'polygon', ST_MakePoint(x, y))`

After reading through 
https://www.crunchydata.com/blog/indexes-selectivity-and-statistics, I think a 
selectivity of `0` for a point might be the intended behaviour, but I'm not 
sure -- based on the blog post (and reading through the PostGIS source), 
spatial selectivity is the % of geometries covered by the search geometry. When 
the search geometry is a point (which has no dimensions), none of the geometry 
will be covered, giving a selectivity of `0`.

This is where I've got to on the investigation so far. Could I have some 
guidance where to look next please? In particular:
    1. Is always returning a specificity of `0` for a point geometry expected 
behaviour?
    2. Is there a way to get more accurate row estimates for point-in-poly 
lookups such as `ST_INTERSECTS(area.polygon, ST_MakePoint(x, y)`?

Many thanks in advance,
Gareth
_______________________________________________
postgis-users mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/postgis-users

Reply via email to