Re: two seperate queries run faster than queries ORed together - Mailing list pgsql-performance

From Richard Huxton
Subject Re: two seperate queries run faster than queries ORed together
Date
Msg-id 200403221655.28667.dev@archonet.com
Whole thread Raw
In response to two seperate queries run faster than queries ORed together  (Joseph Shraibman <jks@selectacast.net>)
Responses Re: two seperate queries run faster than queries ORed together
List pgsql-performance
On Thursday 18 March 2004 21:21, Joseph Shraibman wrote:
> explain
> SELECT COUNT(u.ukey) FROM u, d WHERE d.ukey = u.ukey AND u.pkey = 260
> AND (u.status = 3 OR d.status = 3 ) AND NOT u.boolfield ;
>
>
>                                        QUERY PLAN
> ---------------------------------------------------------------------------
>------------ Aggregate  (cost=128867.45..128867.45 rows=1 width=4)
>     ->  Hash Join  (cost=32301.47..128866.77 rows=272 width=4)
>           Hash Cond: ("outer".ukey = "inner".ukey)
>           Join Filter: (("inner".status = 3) OR ("outer".status = 3))
>           ->  Seq Scan on u  (cost=0.00..41215.97 rows=407824 width=6)
>                 Filter: ((pkey = 260) AND (NOT boolfield))

There's your problem. For some reason it thinks it's getting 407,824 rows back
from that filtered seq-scan. I take it that pkey is a primary-key and is
defined as being UNIQUE? If you actually did have several hundred thousand
matches then a seq-scan might be sensible.

I'd start by analyze-ing the table in question, and if that doesn't have any
effect look at the column stats and see what spread of values it thinks you
have.

--
  Richard Huxton
  Archonet Ltd

pgsql-performance by date:

Previous
From: Kurt Roeckx
Date:
Subject: Re: [HACKERS] fsync method checking
Next
From: markw@osdl.org
Date:
Subject: Re: [HACKERS] fsync method checking