From: | Tomasz Myrta <jasiek(at)klaster(dot)net> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Lista dyskusyjna pgsql-sql <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: explicit joins wrong planning |
Date: | 2003-11-28 20:13:35 |
Message-ID: | 3FC7AC6F.7080603@klaster.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Dnia 2003-11-28 20:52, Użytkownik Tom Lane napisał:
> Tomasz Myrta <jasiek(at)klaster(dot)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))
-> Nested Loop (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_pkey on 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 Scan on 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
From | Date | Subject | |
---|---|---|---|
Next Message | Rod Taylor | 2003-11-28 21:04:28 | Re: rules and return values question |
Previous Message | Tom Lane | 2003-11-28 19:52:03 | Re: explicit joins wrong planning |