Re: explicit joins wrong planning - Mailing list pgsql-sql

From Tomasz Myrta
Subject Re: explicit joins wrong planning
Date
Msg-id 3FC7AC6F.7080603@klaster.net
Whole thread Raw
In response to Re: explicit joins wrong planning  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: explicit joins wrong planning
List pgsql-sql
Dnia 2003-11-28 20:52, Użytkownik Tom Lane napisał:

> Tomasz Myrta <jasiek@klaster.net> writes:
> 
>>If I add "and k.id_trasy=lt.id_trasy" into where clause (duplicate), the 
>>query works fine.
> 
> 
> Define "works fine", please (again, EXPLAIN ANALYZE would be a nice
> concrete description).

Sorry, I thought the wrong case would be enough.
In first case (the worse one) I had: Total runtime: 678.31 msec


After my changes I got:

explain analyze select *
from plany pl  join linia_trasy lt using (id_linii)  join kursy k on (k.event_date=pl.begindate+lt.offset and 
k.id_trasy=lt.id_trasy)
where pl.id_planu=508
and k.id_trasy=lt.id_trasy;
^^^^^^^^^^^^^^^^^^^^^^^^^^^                 QUERY PLAN
-------------------------------------------------------- Nested Loop  (cost=0.00..94.43 rows=2 width=40) (actual 
time=2.97..77.55 rows=5 loops=1)   Join Filter: ("inner".event_date = ("outer".begindate + "outer".offset))   ->
NestedLoop  (cost=0.00..5.81 rows=7 width=29) (actual 
 
time=0.15..0.41 rows=7 loops=1)         Join Filter: ("outer".id_linii = "inner".id_linii)         ->  Index Scan using
plany_pkeyon plany pl  (cost=0.00..4.49 
 
rows=1 width=17) (actual time=0.09..0.10 rows=1 loops=1)               Index Cond: (id_planu = 508)         ->  Seq
Scanon linia_trasy lt  (cost=0.00..1.14 rows=14 
 
width=12) (actual time=0.02..0.15 rows=14 loops=1)   ->  Index Scan using kursy_pkey on kursy k  (cost=0.00..7.62 
rows=288 width=11) (actual time=0.05..8.01 rows=533 loops=7)         Index Cond: ((k.id_trasy = "outer".id_trasy) AND
(k.id_trasy= 
 
"outer".id_trasy)) Total runtime: 78.01 msec

It's much better now (10x faster), but I've just found this plan still 
isn't as I want to have. I wish I could have index usage on both fields, 
it means:
Index Cond: ((k.id_trasy = "outer".id_trasy) AND (("inner".event_date = 
("outer".begindate + "outer".offset)



Regards,
Tomasz Myrta



pgsql-sql by date:

Previous
From: Roger Ging
Date:
Subject: functional index and the planner (v7.4)
Next
From: Rod Taylor
Date:
Subject: Re: rules and return values question