Re: join-performance problem - Mailing list pgsql-sql

From Wolfgang.Fuertbauer@ebewe.com
Subject Re: join-performance problem
Date
Msg-id OF65A70128.C3997CD6-ONC1256BAD.002B15FA@ebewe.co.at
Whole thread Raw
In response to join-performance problem  (Wolfgang.Fuertbauer@ebewe.com)
Responses Re: join-performance problem
List pgsql-sql
On 30.04.2002 18:44:19 pgsql-sql-owner wrote:
>Wolfgang.Fuertbauer@ebewe.com writes:
>>> explain SELECT b.Kdnr, date_part('year', b.Datum), d.Name, e.Name,
a.Menge,
>>> a.Rabproz, a.Netto - (a.netto * a.rabproz / 100),
>>> a.Netto * b.kurs - ((a.netto * b.kurs) * a.rabproz / 100), 'RG'
>>> FROM Faktzeilen a, Fakt b, Artikel c, Kollektion d, ArGruppen e
>>> where a.Fanr = b.nr
>>> and c.nr = a.Arnr
>>> and c.Kollektion = d.Nr
>>> and (c.Gruppe = e.nr or c.gruppe = 0)
>>> and b.kdnr = 49736;
>
>Anyplace that c.gruppe is 0, this is an unconstrained join to e --- ie,
>you'll get a row out for *every* row of e.  Somehow I doubt that's the
>behavior you really want.

you're absolutly right! I fixed that (by having an record in c with nr 0 -
what
is ok for the application)

>I concur with Stephan's observation that you haven't analyzed.  But
>even when you have, this query doesn't give much traction for the use
>of indexes on a --- the only constraint that might possibly be used to
>avoid a complete scan of a is the "b.kdnr = 49736", and that's not even
>on a.  The only hope I can see is if you create an index on b.kdnr;
>then (if there aren't very many rows matching b.kdnr = 49736), it might
>be able to pick those up with an indexscan on b and then do an inner
>indexscan join to a using a.Fanr = b.nr.

OK;
created an index on b.kdnr (fakt_kunde_key) and here is the analyses:

Hash Join  (cost=482.82..704.62 rows=80 width=93) ->  Hash Join  (cost=481.78..702.17 rows=80 width=79)       ->  Hash
Join (cost=480.44..699.43 rows=80 width=59)             ->  Seq Scan on artikel c  (cost=0.00..155.77 rows=4977
 
width=18)             ->  Hash  (cost=480.24..480.24 rows=80 width=41)                   ->  Nested Loop
(cost=0.00..480.24rows=80 width=41)                         ->  Index Scan using fakt_kunde_key on fakt b
 
(cost=0.00..55.11 rows=13 width=16)                         ->  Index Scan using faktzeilen_pkey on
faktzeilen a  (cost=0.00..31.82 rows=10 width=25)       ->  Hash  (cost=1.27..1.27 rows=27 width=20)             ->
SeqScan on argruppen e  (cost=0.00..1.27 rows=27
 
width=20) ->  Hash  (cost=1.03..1.03 rows=3 width=14)       ->  Seq Scan on kollektion d  (cost=0.00..1.03 rows=3
width=14)

EXPLAIN

can you pleas explain me why c is now scanned sequential?

>Your secondary indexes on a
>look like wastes of space (at least for this query).

they are relevant for other queries; this is only a part from a *large*
ordering / invoicing-system I want to port from Access.

Thanks and Best regards
Wolfgang



pgsql-sql by date:

Previous
From: "Joel Burton"
Date:
Subject: Re: CREATE VIEW question...
Next
From: "Rajesh Kumar Mallah."
Date:
Subject: Weird select output...