Problem with the Planner - Mailing list pgsql-hackers

From Anjan Kumar. A.
Subject Problem with the Planner
Date
Msg-id Pine.LNX.4.61.0601160500250.13979@nsl-33.cse.iitb.ac.in
Whole thread Raw
In response to Re: Please Help: PostgreSQL Query Optimizer  ("Anjan Kumar. A." <anjankumar@cse.iitb.ac.in>)
Responses Re: Problem with the Planner
List pgsql-hackers


Please observe the following queries. Why PostgreSQL is favouring MergeJoin eventhough, it leading to higher execution
timesthan NestedLoopJoin. Any suggestions to fix this problem.
 


bench=# EXPLAIN ANALYZE SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 < 50 AND t1.unique2 = t2.unique2;
                                                   QUERY PLAN
 

--------------------------------------------------------------------------------------------------------------------------------------------
MergeJoin  (cost=665.09..4704.60 rows=166701 width=488) (actual time=10.128..40.843 rows=50 loops=1)   Merge Cond:
("outer".unique2= "inner".unique2)   ->  Index Scan using tenk2_unique2 on tenk2 t2  (cost=0.00..1514.00 rows=10000
width=244)(actual time=0.031..20.520 rows=10000 loops=1)   ->  Sort  (cost=665.09..673.42 rows=3334 width=244) (actual
time=9.601..9.646rows=50 loops=1)         Sort Key: t1.unique2         ->  Seq Scan on tenk1 t1  (cost=0.00..470.00
rows=3334width=244) (actual time=0.154..9.140 rows=50 loops=1)               Filter: (unique1 < 50) Total runtime:
41.101ms
 
(8 rows)

bench=# SET enable_mergejoin = off;
SET
bench=# EXPLAIN ANALYZE SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 < 50 AND t1.unique2 = t2.unique2;
                                        QUERY PLAN
 
----------------------------------------------------------------------------------------------------------------------
HashJoin  (cost=588.34..11841.35 rows=166701 width=488) (actual time=9.028..70.453 rows=50 loops=1)   Hash Cond:
("outer".unique2= "inner".unique2)   ->  Seq Scan on tenk2 t2  (cost=0.00..445.00 rows=10000 width=244) (actual
time=0.007..11.846rows=10000 loops=1)   ->  Hash  (cost=470.00..470.00 rows=3334 width=244) (actual time=8.378..8.378
rows=0loops=1)         ->  Seq Scan on tenk1 t1  (cost=0.00..470.00 rows=3334 width=244) (actual time=0.135..8.093
rows=50loops=1)               Filter: (unique1 < 50) Total runtime: 70.659 ms
 
(7 rows)

bench=# SET enable_hashjoin = off;
SET
bench=# EXPLAIN ANALYZE SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 < 50 AND t1.unique2 = t2.unique2;
                                               QUERY PLAN
 

------------------------------------------------------------------------------------------------------------------------------------
NestedLoop  (cost=0.00..633218.15 rows=166701 width=488) (actual time=0.178..9.389 rows=50 loops=1)   ->  Seq Scan on
tenk1t1  (cost=0.00..470.00 rows=3334 width=244) (actual time=0.135..8.349 rows=50 loops=1)         Filter: (unique1 <
50)  ->  Index Scan using tenk2_unique2 on tenk2 t2  (cost=0.00..189.16 rows=50 width=244) (actual time=0.009..0.011
rows=1loops=50)         Index Cond: ("outer".unique2 = t2.unique2) Total runtime: 9.552 ms
 
(6 rows)


-- 
Regards.

Anjan Kumar A.
MTech2,  Comp Sci.,
www.cse.iitb.ac.in/~anjankumar
______________________________________________________________


pgsql-hackers by date:

Previous
From: Andrew Dunstan
Date:
Subject: Re: pgxs/windows
Next
From: Tom Lane
Date:
Subject: Re: pgxs/windows