Received: from localhost (maia-1.hub.org [200.46.204.191]) by postgresql.org (Postfix) with ESMTP id DBF689FA37A for ; Wed, 6 Dec 2006 16:31:25 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.191]) (amavisd-new, port 10024) with ESMTP id 29199-02 for ; Wed, 6 Dec 2006 16:31:08 -0400 (AST) X-Greylist: from auto-whitelisted by SQLgrey-1.7.4 Received: from myemma.com (db1.e2ma.net [66.179.147.163]) by postgresql.org (Postfix) with ESMTP id 722379FA42F for ; Wed, 6 Dec 2006 16:31:08 -0400 (AST) Received: from localhost (localhost.localdomain [127.0.0.1]) by myemma.com (Postfix) with ESMTP id BD8F023CE9; Wed, 6 Dec 2006 14:31:06 -0600 (CST) Received: from myemma.com ([127.0.0.1]) by localhost (velma [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 19822-05; Wed, 6 Dec 2006 14:31:06 -0600 (CST) Received: from [10.0.23.59] (unknown [209.149.59.218]) by myemma.com (Postfix) with ESMTP id E1A6B23CE6; Wed, 6 Dec 2006 14:31:05 -0600 (CST) Message-ID: <4577288A.8080800@myemma.com> Date: Wed, 06 Dec 2006 14:31:06 -0600 From: Erik Jones User-Agent: Thunderbird 1.5.0.7 (Windows/20060909) MIME-Version: 1.0 To: Rafael Martinez Cc: Ted Allen , Stephan Szabo , pgsql-performance@postgresql.org Subject: Re: Problems with an update-from statement and pg-8.1.4 References: <1165432244.9606.18.camel@bbking.linux> <20061206111630.R8187@megazone.bigpanda.com> <45772022.4050303@blackducksoftware.com> <1165435845.9606.26.camel@bbking.linux> <457725DA.90402@myemma.com> <1165436967.9606.32.camel@bbking.linux> In-Reply-To: <1165436967.9606.32.camel@bbking.linux> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at myemma.com X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200612/151 X-Sequence-Number: 22207 Rafael Martinez wrote: > On Wed, 2006-12-06 at 14:19 -0600, Erik Jones wrote: > >> Rafael Martinez wrote: >> >>> On Wed, 2006-12-06 at 14:55 -0500, Ted Allen wrote: >>> >>> >>>> Stephan Szabo wrote: >>>> >>>> >>>>> On Wed, 6 Dec 2006, Rafael Martinez wrote: >>>>> >>>>> >>>>>> mailstats=# EXPLAIN update mail SET spamscore = '-5.026' FROM mail m, >>>>>> mail_received mr where mr.mail_id = m.mail_id AND mr.queue_id = >>>>>> '1GrxLs-0004N9-I1' and mr.mailhost = '129.240.10.47'; >>>>>> >>>>>> >>>>>> >>>>> I don't think this statement does what you expect. You're ending up with >>>>> two copies of mail in the above one as "mail" and one as "m". You probably >>>>> want to remove the mail m in FROM and use mail rather than m in the >>>>> where clause. >>>>> >>>>> >>>>> >>>>> >>>> Worse yet I think your setting "spamcore" for EVERY row in mail to >>>> '-5.026'. The above solution should fix it though. >>>> >>>> -- Ted >>>> >>>> >>>> >>> Thanks for the answers. I think the 'problem' is explain in the >>> documentation: >>> >>> "fromlist >>> >>> A list of table expressions, allowing columns from other tables to >>> appear in the WHERE condition and the update expressions. This is >>> similar to the list of tables that can be specified in the FROMClause of >>> a SELECT statement. Note that the target table must not appear in the >>> fromlist, unless you intend a self-join (in which case it must appear >>> with an alias in the fromlist)". >>> >>> And as you said, we can not have 'mail m' in the FROM clause. I have >>> contacted the developers and they will change the statement. I gave then >>> these 2 examples: >>> >>> ------------------------------------------------------------------------------- >>> mailstats=# EXPLAIN update mail SET spamscore = '-5.026' FROM >>> mail_received mr where mr.mail_id = mail.mail_id AND mr.queue_id = >>> '1GrxLs-0004N9-I1' and mr.mailhost = '129.240.10.47'; >>> QUERY PLAN >>> ------------------------------------------------------------------------------------------------------ >>> Nested Loop (cost=0.00..6.54 rows=1 width=57) >>> -> Index Scan using received_queue_id_index on mail_received mr >>> (cost=0.00..3.20 rows=1 width=4) >>> Index Cond: ((queue_id)::text = '1GrxLs-0004N9-I1'::text) >>> Filter: (mailhost = '129.240.10.47'::inet) >>> -> Index Scan using mail_pkey on mail (cost=0.00..3.32 rows=1 >>> width=57) >>> Index Cond: ("outer".mail_id = mail.mail_id) >>> (6 rows) >>> >>> mailstats=# explain update mail SET spamscore = '-5.026' where mail_id >>> = (select mail_id from mail_received where queue_id = '1GrxLs-0004N9-I1' >>> and mailhost = '129.240.10.47'); >>> QUERY PLAN >>> ----------------------------------------------------------------------------------------------------- >>> Index Scan using mail_pkey on mail (cost=3.20..6.52 rows=1 width=57) >>> Index Cond: (mail_id = $0) >>> InitPlan >>> -> Index Scan using received_queue_id_index on mail_received >>> (cost=0.00..3.20 rows=1 width=4) >>> Index Cond: ((queue_id)::text = '1GrxLs-0004N9-I1'::text) >>> Filter: (mailhost = '129.240.10.47'::inet) >>> (6 rows) >>> ------------------------------------------------------------------------------- >>> >>> >> Look again at the estimated costs of those two query plans. You haven't >> gained anything there. Try this out: >> >> EXPLAIN UPDATE mail >> SET spamscore = '-5.026' >> FROM mail_received mr >> WHERE mail.mail_id = mr.mail_id AND mr.queue_id = '1GrxLs-0004N9-I1' ; >> >> > > Haven't we? > > * In the statement with problems we got this: > Nested Loop (cost=0.00..932360.78 rows=7184312 width=57) > > * In the ones I sent: > Nested Loop (cost=0.00..6.54 rows=1 width=57) > Index Scan using mail_pkey on mail (cost=3.20..6.52 rows=1 width=57) > > * And in the last one you sent me: > ------------------------------------------------------ > Nested Loop (cost=0.00..6.53 rows=1 width=57) > -> Index Scan using received_queue_id_index on mail_received mr > (cost=0.00..3.20 rows=1 width=4) > Index Cond: ((queue_id)::text = '1GrxLs-0004N9-I1'::text) > -> Index Scan using mail_pkey on mail (cost=0.00..3.32 rows=1 > width=57) > Index Cond: (mail.mail_id = "outer".mail_id) > (5 rows) > ------------------------------------------------------ > > I can not see the different. > > regards, > Ah, sorry, I was just looking at the two that you sent in your last message thinking that they were 'old' and 'new', not both 'new'. My bad... -- erik jones software development emma(r)