Received: from localhost (maia-3.hub.org [200.46.204.184]) by postgresql.org (Postfix) with ESMTP id 3F74B9FB279 for ; Thu, 11 Jan 2007 14:28:14 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.184]) (amavisd-new, port 10024) with ESMTP id 23785-04 for ; Thu, 11 Jan 2007 14:28:06 -0400 (AST) X-Greylist: from auto-whitelisted by SQLgrey-1.7.4 Received: from mail.trinitydigital.com.au (unknown [202.134.38.99]) by postgresql.org (Postfix) with ESMTP id 23AE09FB24E for ; Thu, 11 Jan 2007 14:28:07 -0400 (AST) Received: from [172.17.73.3] (unknown [202.134.38.110]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.trinitydigital.com.au (Postfix) with ESMTP id DB32CCD1; Fri, 12 Jan 2007 05:28:02 +1100 (EST) Message-ID: <45A681B7.8090104@pws.com.au> Date: Fri, 12 Jan 2007 05:28:07 +1100 From: Russell Smith User-Agent: Thunderbird 1.5.0.9 (Windows/20061207) MIME-Version: 1.0 To: carlos.reimer@opendb.com.br CC: pgsql-performance@postgresql.org Subject: Re: Improving SQL performance References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200701/179 X-Sequence-Number: 22780 Carlos H. Reimer wrote: > Hi, > > I know that the problem with the following SQL is the "LOG.CODCEP = > ENDE.CODCEP||CODLOG" condition, but what can I > do to improve the performance? > I wouldn't say it's the join condition. There is a nested loop join on 500k+ rows. Is it possible to put an index on LOG.CODCEP? That might give you a better plan, as you only have 1 row in the left of the join. so index scan would be preferable. Regards Russell Smith > Is there a type of index that could help or is there another way to > build this SQL? > > Thank you in advance! > > explain analyze > SELECT ENDE.* , DEND.DESEND, DEND.USOEND, DEND.DUPEND, > to_char('F') as NOVO, > LOG.TIPLOG > FROM TT_END ENDE LEFT OUTER JOIN TD_END DEND ON DEND.CODTAB > = ENDE.TIPEND > LEFT OUTER JOIN TT_LOG LOG ON LOG.CODCEP = > ENDE.CODCEP||CODLOG > WHERE ENDE.FILCLI = '001' > AND ENDE.CODCLI = ' 19475'; > > > QUERY > PLAN > ---------------------------------------------------------------------------------------------------------------------------------- > Nested Loop Left Join (cost=0.00..25366.84 rows=1259 width=417) > (actual time=1901.499..1901.529 rows=1 loops=1) > Join Filter: (("inner".codcep)::text = (("outer".codcep)::text || > ("outer".codlog)::text)) > -> Nested Loop Left Join (cost=0.00..4.91 rows=1 width=412) > (actual time=0.117..0.144 rows=1 loops=1) > Join Filter: ("inner".codtab = "outer".tipend) > -> Index Scan using pk_end on tt_end ende (cost=0.00..3.87 > rows=1 width=388) (actual time=0.066..0.078 rows=1 loops=1) > Index Cond: ((filcli = '001'::bpchar) AND (codcli = ' > 19475'::bpchar)) > -> Seq Scan on td_end dend (cost=0.00..1.02 rows=2 > width=33) (actual time=0.012..0.018 rows=2 loops=1) > -> Seq Scan on tt_log log (cost=0.00..12254.24 rows=582424 > width=17) (actual time=0.013..582.521 rows=582424 loops=1) > Total runtime: 1901.769 ms > (9 rows) > > \d tt_log > Table "TOTALL.tt_log" > Column | Type | Modifiers > --------+------------------------+----------- > codbai | numeric(5,0) | not null > nomlog | character varying(55) | not null > codcep | character(8) | not null > > \d tt_end > Table "TOTALL.tt_end" > Column | Type | Modifiers > --------+-----------------------+----------------------------------------- > ... > ... > ... > codlog | character(3) | > ... > ... > ... > codcep | character(5) | > ... > ... > > Reimer > >