Re: Slow query: Select all buildings that have >1 pharmacies and >1 schools within 1000m

From: "Tomas Vondra" <tv(at)fuzzy(dot)cz>
To: "Stefan Keller" <sfkeller(at)gmail(dot)com>
Cc: pgsql-performance(at)postgresql(dot)org
Subject: Re: Slow query: Select all buildings that have >1 pharmacies and >1 schools within 1000m
Date: 2012-08-07 12:16:43
Message-ID: 1e50929e6ba44cabb8deb2ad0ee98c82.squirrel@sq.gransy.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

On 7 Srpen 2012, 14:01, Stefan Keller wrote:
> Hi
>
> I have an interesting query to be optimized related to this one [1].
>
> The query definition is: Select all buildings that have more than 1
> pharmacies and more than 1 schools within a radius of 1000m.
>
> The problem is that I think that this query is inherently O(n^2). In
> fact the solution I propose below takes forever...

What about plain INTERSECT? Something like

SELECT osm_id FROM osm_poi AS p, osm_polygon b
WHERE p.tags @> hstore('amenity','pharmacy')
AND ST_DWithin(b.way,p.way,1000)
INTERSECT
SELECT osm_id FROM osm_poi AS p, osm_polygon b
WHERE p.tags @> hstore('amenity','school')
AND ST_DWithin(b.way,p.way,1000)

Or something like that. But maybe it's a complete nonsense ...

Tomas

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Stefan Keller 2012-08-07 12:22:53 Re: Slow query: Select all buildings that have >1 pharmacies and >1 schools within 1000m
Previous Message Ioannis Anagnostopoulos 2012-08-07 12:15:06 Re: Sequential scan instead of index scan