Why is outer Join way quicker? - Mailing list pgsql-general
From | David Link |
---|---|
Subject | Why is outer Join way quicker? |
Date | |
Msg-id | 3CC58A86.9254C985@soundscan.com Whole thread Raw |
Responses |
Re: Why is outer Join way quicker?
|
List | pgsql-general |
Hi. We have found that by using an Outer Join it speeds up this query considerably. Why is that? According to the explain plan the hold up has to do with a single nexted loop and a "Materilize"? This makes no sense to me. Can some one explain. Thanks. -David The difference between these two queries is the first uses an outer join between u and t, while the second (the slower) uses a straight forward join). -- Query 1: SELECT u.upc, t.title, tot.ytd, tot.rtd FROM upc u LEFT OUTER JOIN title t ON t.tcode = u.tcode LEFT OUTER JOIN total tot ON tot.tcode = t.tcode AND tot.week = 200210 AND tot.region='TOTAL' WHERE u.upc LIKE '%0085392227%' ORDER BY title ASC LIMIT 500 OFFSET 0; -- Query 1: Actual Time: 1 second 0.03user 0.00system 0:00.96elapsed 3%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (576major+168minor)pagefaults 0swaps -- Query 1: QUERY PLAN: Limit (cost=2801.10..2801.10 rows=1 width=108) -> Sort (cost=2801.10..2801.10 rows=1 width=108) -> Nested Loop (cost=0.00..2801.09 rows=1 width=108) -> Nested Loop (cost=0.00..2796.06 rows=1 width=48) -> Seq Scan on upc u (cost=0.00..2791.43 rows=1 width=24) -> Index Scan using title_pkey on title t (cost=0.00..4.63 rows=1 width=24) -> Index Scan using total_week_tcode_ind on total tot (cost=0.00..5.01 rows=1 width=60) -- ======================================= -- Query 2 explain SELECT u.upc, t.title, tot.ytd, tot.rtd FROM upc u, title t left outer join total tot ON tot.tcode = t.tcode AND tot.week = 200210 AND tot.region='TOTAL' WHERE t.tcode = u.tcode and u.upc LIKE '%0085392227%' ORDER BY title ASC LIMIT 500 OFFSET 0; -- Query 2: Actual Time: 36 SECONDS!!! 0.01user 0.02system 0:35.33elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (576major+168minor)pagefaults 0swaps Limit (cost=541352.96..541352.96 rows=1 width=108) -> Sort (cost=541352.96..541352.96 rows=1 width=108) -> Nested Loop (cost=0.00..541352.95 rows=1 width=108) -> Seq Scan on upc u (cost=0.00..2791.43 rows=1 width=24) -> Materialize (cost=537241.84..537241.84 rows=105575 width=84) -> Nested Loop (cost=0.00..537241.84 rows=105575 width=84) -> Seq Scan on title t (cost=0.00..6228.75 rows=105575 width=24) -> Index Scan using total_week_tcode_ind on total tot (cost=0.00..5.01 rows=1 width=60) -- Output (from both Query 1 and Query 2): upc | title | ytd | rtd --------------+--------------------------------+--------+--------- 008539222773 | CATS AND DOGS | 65240 | 1080103 008539222772 | CATS AND DOGS-2001-PS | 47683 | 480374 008539222793 | CATS & DOGS | | 008539222753 | MATRIX/MATRIX REVISITED 2-PACK | 299 | 1395 008539222783 | SWORDFISH | 27992 | 234049 008539222782 | SWORDFISH | 136727 | 987219 (6 rows)
pgsql-general by date: