Re: Query optimization - Mailing list pgsql-performance

From Fred Moyer
Subject Re: Query optimization
Date
Msg-id 55900.168.103.211.137.1039291841.squirrel@mail.digicamp.com
Whole thread Raw
In response to Re: Query optimization  (Richard Huxton <dev@archonet.com>)
Responses Re: Query optimization
List pgsql-performance
Ikes, they are the same, a cut and paste error.  Sorry about that.  No
joins involved, one table with 1 million records, about 255 rows, only
about 10% of the rows contain data in this particular instance.

object is indexed on active, registrant, and name as well as UPPER(name).
Postgres version is 7.2.3

Here is the relevant table info (some schema details omitted for brevity)

id              | numeric(10,0)            | not null default
nextval('seq_object'
::text)
name           | character varying(64)    |
registrant      | boolean                  |
active          | numeric(1,0)             | not null default 1

registrant__object__idx
active__object__idx,
name__object__idx,
upper_name__object__idx,
id__object__idx,
Primary key: pk_object__id

db=# select count(*) from count;
  count
---------
 1032953
(1 row)

db=# explain analyze select count(*) from object;
NOTICE:  QUERY PLAN:

Aggregate  (cost=100073270.91..100073270.91 rows=1 width=0) (actual
time=3085.51..3085.51 rows=1 loops=1)
  ->  Seq Scan on object  (cost=100000000.00..100070688.53 rows=1032953
width=0) (actual time=0.01..2008.51 rows=1032953 loops=1)
Total runtime: 3085.62 msec

EXPLAIN

> On Saturday 07 Dec 2002 2:16 am, Fred Moyer wrote:
>>
>> database=# explain analyze SELECT active,registrant,name FROM object
>> WHERE object.active = 1 AND object.registrant = 't' ORDER BY
>> UPPER(object.name) DESC LIMIT 10 OFFSET 0;
>> NOTICE:  QUERY PLAN:
>
> What's the connection between "person" and "object"? Looks like an
> unconstrained join from here. Schema and count(*) for both and details
> of  indexes would be useful.
>
>> Limit  (cost=nan..nan rows=10 width=2017) (actual
>                ^^^^^^^^
> Never seen this "nan" before - presumably Not A Number, but I don't know
> why  the planner generates it
>
>> time=204790.82..204790.84 rows=10 loops=1)
>>   ->  Sort  (cost=nan..nan rows=1032953 width=2017) (actual
>> time=204790.81..204790.82 rows=11 loops=1)
>>         ->  Index Scan using registrant__object__idx on object
>> (cost=0.00..81733.63 rows=1032953 width=2017) (actual
>> time=0.14..94509.14 rows=1032946 loops=1)
>> Total runtime: 205125.75 msec
>
> Without seeing schema details difficult to suggest much. If it's this
> particular query that's the problem you might try a partial index
>
> CREATE INDEX foo_object_idx ON object (upper(object.name)) WHERE
> active=1 AND  registrant='t';
>
> See CREATE INDEX in the manuals for details.
>
> --
>   Richard Huxton
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org


Fred Moyer
Digital Campaigns, Inc.



pgsql-performance by date:

Previous
From: Richard Huxton
Date:
Subject: Re: Query optimization
Next
From: Jochem van Dieten
Date:
Subject: Re: Query optimization