[postgis-users] ST_DWithin Performance
Carl S. Yestrau Jr.
carl at featureblend.com
Sat Feb 12 14:16:12 PST 2011
When I removed the "ORDER BY created_on DESC" the results were almost
instantaneous (which makes sense as it just returns the first 'x'
result defined by LIMIT). I don't have access to the machine at the
moment, but can get the plan for that if it's helpful.
I'm pretty confused why things are so slow. The only thing I can think
of is possibly the data density, I have over 700K records within a 20
minute window.
On Sat, Feb 12, 2011 at 12:27 AM, strk <strk at keybit.net> wrote:
> On Fri, Feb 11, 2011 at 02:27:16PM -0800, Carl S. Yestrau Jr. wrote:
>
>> Table schema:
>> Table "public.geobits"
>> Column | Type |
>> Modifiers
>> ---------------+-----------------------------+------------------------------------------------------
>> id | integer | not null default
>> nextval('geobits_id_seq'::regclass)
>> uuid | uuid | not null
>> raw | text | not null
>> search_config | regconfig |
>> ip | inet | not null
>> user_agent | text |
>> created_on | timestamp without time zone | default now()
>> location | geography(Point,4326) | not null
>> parent_id | integer |
>> language_code | text |
>> group_id | integer |
>> Indexes:
>> "geobits_pkey" PRIMARY KEY, btree (id)
>> "geobits_uuid_key" UNIQUE, btree (uuid)
>> "geobits_created_on_index" btree (created_on)
>> "geobits_group_id_index" btree (group_id)
>> "geobits_location_index" gist (location)
>> "geobits_parent_id_index" btree (parent_id)
>> "geobits_search_config_index" gin (to_tsvector(search_config, raw))
>> Foreign-key constraints:
>> "geobits_group_id_fkey" FOREIGN KEY (group_id) REFERENCES groups(id)
>> "geobits_language_code_fkey" FOREIGN KEY (language_code)
>> REFERENCES languages(code) ON DELETE SET NULL
>> "geobits_parent_id_fkey" FOREIGN KEY (parent_id) REFERENCES
>> geobits(id) ON DELETE SET NULL
>> Referenced by:
>> TABLE "geobits" CONSTRAINT "geobits_parent_id_fkey" FOREIGN KEY
>> (parent_id) REFERENCES geobits(id) ON DELETE SET NULL
>>
>>
>> Slow Query:
>> EXPLAIN ANALYZE SELECT id, created_on FROM geobits WHERE
>> ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(180 90)'),
>> 1000) ORDER BY created_on DESC LIMIT 10;
>>
>>
>> QUERY PLAN
>>
>> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> --------------------------------------------------------------------------
>> Limit (cost=205352.10..205352.10 rows=1 width=12) (actual
>> time=4078.057..4078.090 rows=10 loops=1)
>> -> Sort (cost=205352.10..205352.10 rows=1 width=12) (actual
>> time=4078.053..4078.064 rows=10 loops=1)
>> Sort Key: created_on
>> Sort Method: top-N heapsort Memory: 17kB
>> -> Seq Scan on geobits (cost=0.00..205352.08 rows=1
>> width=12) (actual time=0.015..3100.471 rows=708661 loops=1)
>> Filter: ((location &&
>> '0101000020E610000000000000008066400000000000805640'::geography) AND
>> ('0101000020E610000000000000008066400000000000805640'::geography &&
>> _st_expand(location, 1000::double precision)) AND
>> _st_dwithin(location, '0101000020E6100000000
>> 00000008066400000000000805640'::geography, 1000::double precision, true))
>> Total runtime: 4078.127 ms
>> (7 rows)
>
> The "geobits_location_index" gist (location) index is not being used,
> for some reason. Why do you say ORDER BY is the culprit ? Does
> the plan come out differently w/out that ?
>
> --strk;
>
> () Free GIS & Flash consultant/developer
> /\ http://strk.keybit.net/services.html
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
More information about the postgis-users
mailing list