Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id 780C664FD3B for ; Thu, 28 Aug 2008 16:31:11 -0300 (ADT) Received: from postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 93517-04 for ; Thu, 28 Aug 2008 16:31:05 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from perseverance.services.encs.concordia.ca (perseverance-96.encs.concordia.ca [132.205.96.94]) by postgresql.org (Postfix) with ESMTP id 18A5C64FD10 for ; Thu, 28 Aug 2008 16:31:07 -0300 (ADT) Received: from cacao.encs.concordia.ca (emilu@cacao.encs.concordia.ca [132.205.47.225]) by perseverance.services.encs.concordia.ca (envelope-from emilu@encs.concordia.ca) (8.13.7/8.13.7) with ESMTP id m7SJV409025688 for ; Thu, 28 Aug 2008 15:31:04 -0400 Message-ID: <48B6FCF8.3090807@encs.concordia.ca> Date: Thu, 28 Aug 2008 15:31:04 -0400 From: Emi Lu Reply-To: emilu@encs.concordia.ca User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: pgsql-performance@postgresql.org Subject: update - which way quicker? Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on perseverance.encs.concordia.ca at 2008/08/28 15:31:04 EDT X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200808/384 X-Sequence-Number: 31265 Good morning, Tried to compare Table1 based on Table2 . update table1.col = false if table1.pk_cols not in table2.pk_cols For the following two ways, (2) always performs better than (1) right, and I need your inputs. ======================================================================== (1) update table1 set col = false where table1.pk_co1 || table1.pk_col2.... || table1.pk_colN NOT IN (select pk_co1 || pk_col2.... || pk_colN from table2 ) (2) ResultSet(rs) = select pk_col1||pk_col2... || pk_colN from table1 left join table2 using (pk_col1..., pk_colN) where table2.pk_col1 is null Then for each rs record, do: update table1 set col = false where col1||... colN in rs.value Thanks a lot!