Re: two seperate queries run faster than queries ORed together

From: Richard Huxton <dev(at)archonet(dot)com>
To: Joseph Shraibman <jks(at)selectacast(dot)net>, pgsql-performance(at)postgresql(dot)org
Subject: Re: two seperate queries run faster than queries ORed together
Date: 2004-03-22 16:55:28
Message-ID: 200403221655.28667.dev@archonet.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message markw 2004-03-22 17:33:59 Re: [HACKERS] fsync method checking
Previous Message Greg Spiegelberg 2004-03-22 14:08:28 Re: atrocious update performance