Optimizer example


oscon=>  explain select relname,nspname from pg_class
oscon->  left join pg_namespace on (pg_class.relnamespace = pg_namespace.oid);
                          QUERY PLAN                           
---------------------------------------------------------------
 Hash Join  (C=1.05..7.46 R=124 W=136)
   Hash Cond: ("outer".relnamespace = "inner".oid)
   ->  Seq Scan on pg_class  (C=0.00..4.24 R=124 W=68)
   ->  Hash  (C=1.04..1.04 R=4 W=68)
         ->  Seq Scan on pg_namespace  (C=0.00..1.04 R=4 W=68)


oscon=> set enable_hashjoin = false;
SET

oscon=>  explain select relname,nspname from pg_class
oscon->  left join pg_namespace on (pg_class.relnamespace = pg_namespace.oid);
                          QUERY PLAN                           
---------------------------------------------------------------
 Merge Join  (C=9.63..11.82 R=124 W=136)
   Merge Cond: ("outer".relnamespace = "inner".oid)
   ->  Sort  (C=8.55..8.86 R=124 W=68)
         Sort Key: pg_class.relnamespace
         ->  Seq Scan on pg_class  (C=0.00..4.24 R=124 W=68)
   ->  Sort  (C=1.08..1.09 R=4 W=68)
         Sort Key: pg_namespace.oid
         ->  Seq Scan on pg_namespace  (C=0.00..1.04 R=4 W=68)


oscon=> set enable_mergejoin = false;
SET

oscon=>  explain select relname,nspname from pg_class
oscon->  left join pg_namespace on (pg_class.relnamespace = pg_namespace.oid);
                       QUERY PLAN                        
---------------------------------------------------------
 Nested Loop  (C=0.00..139.40 R=124 W=136)
   Join Filter: ("outer".relnamespace = "inner".oid)
   ->  Seq Scan on pg_class  (C=0.00..4.24 R=124 W=68)
   ->  Seq Scan on pg_namespace  (C=0.00..1.04 R=4 W=68)


oscon=> set enable_nestloop = false;
SET

oscon=>  explain select relname,nspname from pg_class
oscon->  left join pg_namespace on (pg_class.relnamespace = pg_namespace.oid);
                       QUERY PLAN                        
---------------------------------------------------------
 Nested Loop  (C=100000000.00..100000139.40 R=124 W=136)
   Join Filter: ("outer".relnamespace = "inner".oid)
   ->  Seq Scan on pg_class  (C=0.00..4.24 R=124 W=68)
   ->  Seq Scan on pg_namespace  (C=0.00..1.04 R=4 W=68)

Why did the nestloop "win"?

Previous: Forcing a plan         [Table of Contents]         Next: Functions