X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id 430245351D for ; Tue, 12 Apr 2005 02:35:21 -0300 (ADT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 22678-09 for ; Tue, 12 Apr 2005 05:35:20 +0000 (GMT) Received: from floppy.pyrenet.fr (news.pyrenet.fr [194.116.145.2]) by svr1.postgresql.org (Postfix) with ESMTP id 27BC953535 for ; Tue, 12 Apr 2005 02:35:17 -0300 (ADT) Received: by floppy.pyrenet.fr (Postfix, from userid 106) id 175E430952; Tue, 12 Apr 2005 07:34:38 +0200 (MET DST) From: Ezequiel Tolnay X-Newsgroups: pgsql.sql Subject: Re: Query runs very slowly in Postgres, but very fast in other DBMS Date: Tue, 12 Apr 2005 15:36:38 +1000 Organization: Hub.Org Networking Services Lines: 18 Message-ID: <425B5E66.8080905@etolnay.com.ar> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@news.hub.org To: Andrus Moor User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050319 X-Accept-Language: en-au, en-gb, en-us, en, es-ar, es-es In-Reply-To: To: pgsql-sql@postgresql.org X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, hits=0.103 tagged_above=0 required=5 tests=AWL, UPPERCASE_25_50 X-Spam-Level: X-Archive-Number: 200504/177 X-Sequence-Number: 21070 Andrus Moor wrote: > SELECT dokumnr FROM rid WHERE dokumnr NOT IN > (select dokumnr FROM dok); ... > Is it possible to speed up this query is Postgres ? How to force Postgres to > use indexes for this query ? Use IN and NOT IN only for small sets. Use JOIN (instead of IN) and LEFT JOIN (instead of NOT IN) for larger sets. e.g.: SELECT rid.dokumnr FROM rid LEFT JOIN dok ON (dok.dokumnr = rid.dokumnr) WHERE dok.dokumnr iS NULL; Cheers, Ezequiel Tolnay