Laurent, > select distinct on (Pictures.PictureID) * from Pictures where > Pictures.PictureID not in (select distinct PictureID from Keywords); > > 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) NOT IN is always slow on all RDBMS that I know, unless the subselect has a very small (<100) return set. This is because the engine has to compare each row in the master query against every value returned by NOT IN, one row at a time. Try the WHERE NOT EXISTS construction instead: SELECT * FROM Pictures WHERE NOT EXISTS ( SELECT pictureID FROM keywords WHERE keywords.pictureID = Pictures.pictureID ); This uses the DB engine's JOIN functionality and thus runs considerably faster. BTW, all those "DISTINCT" in the query example you gave, assuming that PictureID is the unique index of Pictures, are completely superfluous and will only slow the query down. Particularly the use of DISTINCT in a subquery should only be used if the contents of the subquery will be displayed as part of the result set. -Josh Berkus ______AGLIO DATABASE SOLUTIONS___________________________ Josh Berkus Complete information technology [EMAIL PROTECTED] and data management solutions (415) 565-7293 for law firms, small businesses fax 621-2533 and non-profit organizations. San Francisco
---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/users-lounge/docs/faq.html