Re: optimizing select ... not in (select ...) - Mailing list pgsql-sql

From Tomas Berndtsson
Subject Re: optimizing select ... not in (select ...)
Date
Msg-id 80pua0ypph.fsf@junk.nocrew.org
Whole thread Raw
In response to optimizing select ... not in (select ...)  (Laurent Martelli <laurent@aopsys.com>)
List pgsql-sql
Laurent Martelli <laurent@aopsys.com> writes:

> I have this query :
> 
> select distinct on (Pictures.PictureID) * from Pictures where Pictures.PictureID not in (select distinct PictureID
fromKeywords);
 
> 
> and I find it a bit slow. Does anybody have suggestions to run this
> faster ? (I have indexes on PictureID on both Pictures and Keywords) 

Try this instead:

select distinct on (Pictures.PictureID) *from Pictureswhere not exists (select distinct PictureID from Keywords where
Pictures.PictureID=Keywords.PictureID);

I've found that it's usually faster, probably because it can use
indices better.


Tomas


pgsql-sql by date:

Previous
From: "Josh Berkus"
Date:
Subject: Re: optimizing select ... not in (select ...)
Next
From: Bruce Momjian
Date:
Subject: Re: optimizing select ... not in (select ...)