Re: Optimizing NOT IN plans / verify rewrite - Mailing list pgsql-performance

From Kevin Grittner
Subject Re: Optimizing NOT IN plans / verify rewrite
Date
Msg-id 4C56D6490200002500034093@gw.wicourts.gov
Whole thread Raw
In response to Optimizing NOT IN plans / verify rewrite  (Maciek Sakrejda <msakrejda@truviso.com>)
Responses Re: Optimizing NOT IN plans / verify rewrite
List pgsql-performance
Maciek Sakrejda <msakrejda@truviso.com> wrote:

> DELETE FROM foo WHERE type = 'o' AND b NOT IN (SELECT cqc.b FROM
> bar cqc) AND b NOT IN (SELECT car.b FROM foo car WHERE car.type !=
> 'o');

Can "b" be null in any of these tables?  If not, then you can
rewrite your query to us NOT EXISTS and have the same semantics.
That will often be much faster.  Something like:

DELETE FROM foo
  WHERE type = 'o'
    AND NOT EXISTS (SELECT * FROM bar cqc where cqc.b = foo.b)
    AND NOT EXISTS (SELECT * FROM foo car WHERE car.b = foo.b
                    AND car.type <> 'o');

-Kevin

pgsql-performance by date:

Previous
From: Maciek Sakrejda
Date:
Subject: Optimizing NOT IN plans / verify rewrite
Next
From: Maciek Sakrejda
Date:
Subject: Re: Optimizing NOT IN plans / verify rewrite