Re: Performance problems with prepared statements - Mailing list pgsql-performance

From Kevin Grittner
Subject Re: Performance problems with prepared statements
Date
Msg-id 470F7EC5.EE98.0025.0@wicourts.gov
Whole thread Raw
In response to Re: Performance problems with prepared statements  (Theo Kramer <theo@flame.co.za>)
List pgsql-performance
>>> On Fri, Oct 12, 2007 at  9:57 AM, in message
<1192201021.6170.47.camel@localhost.localdomain>, Theo Kramer
<theo@flame.co.za> wrote:
>
> select * from foo where
>   (a = a1 and b = b1 and c >= c1) or
>   (a = a1 and b < b1) or
>   (a > a1)
> order by a, b desc, c;
>
> I have, however, found that transforming the above into a union based
> query performs substantially better.

Another approach which often performs better is to rearrange the logic
so that the high-order predicate is AND instead of OR:

select * from foo where
      ( a >= a1
  and ( a >  a1
   or ( b <= b1
  and ( b <  b1
   or ( c >= c1 )))))
  order by a, b desc, c;

With the right index and a limit on rows, this can do particularly well.

-Kevin




pgsql-performance by date:

Previous
From: Theo Kramer
Date:
Subject: Re: Performance problems with prepared statements
Next
From: Tom Lane
Date:
Subject: Re: Huge amount of memory consumed during transaction