explain_verbose.txt

text/plain

Filename: explain_verbose.txt
Type: text/plain
Part: 0
Message: Re: enable_incremental_sort changes query behavior
test=# explain (verbose)
select m.id2, m.id, s.description
FROM main m
LEFT JOIN (
  SELECT DISTINCT
    m.id,
    CASE
    WHEN m.id2 = 15 AND (SELECT name FROM secondary x WHERE x.id = s2.id AND x.id2 = 10) = md5(123::text) THEN 'description'
    WHEN m.id2 = 15 THEN (SELECT name FROM secondary x WHERE x.id = s2.id AND x.id2 = 5)
    END AS description
  FROM main m
  JOIN secondary s2 ON m.id = s2.id
  WHERE m.id2 = 15 and type = 0
) s ON s.id = m.id
WHERE m.id2 IN (15) and type = 0 ;
                                                                                                             QUERY PLAN                                                                                                                                                                                                
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------                                                                                  
 Merge Right Join  (cost=126496.41..9205100.33 rows=34236 width=44)
   Output: m.id2, m.id, (CASE WHEN ((m_1.id2 = 15) AND ((SubPlan 1) = '202cb962ac59075b964b07152d234b70'::text)) THEN 'description'::text WHEN (m_1.id2 = 15) THEN (SubPlan 2) ELSE NULL::text END)                                                                                                                    
   Inner Unique: true
   Merge Cond: (m_1.id = m.id)
   ->  Unique  (cost=125495.95..9092259.53 rows=34236 width=40)
         Output: m_1.id, (CASE WHEN ((m_1.id2 = 15) AND ((SubPlan 1) = '202cb962ac59075b964b07152d234b70'::text)) THEN 'description'::text WHEN (m_1.id2 = 15) THEN (SubPlan 2) ELSE NULL::text END)                                                                                                                   
         ->  Gather Merge  (cost=125495.95..9089667.83 rows=518341 width=40)
               Output: m_1.id, (CASE WHEN ((m_1.id2 = 15) AND ((SubPlan 1) = '202cb962ac59075b964b07152d234b70'::text)) THEN 'description'::text WHEN (m_1.id2 = 15) THEN (SubPlan 2) ELSE NULL::text END)                                                                                                             
               Workers Planned: 2
               ->  Sort  (cost=124495.93..125035.87 rows=215975 width=20)
                     Output: m_1.id, m_1.id2, s2.id, (CASE WHEN ((m_1.id2 = 15) AND ((SubPlan 1) = '202cb962ac59075b964b07152d234b70'::text)) THEN 'description'::text WHEN (m_1.id2 = 15) THEN (SubPlan 2) ELSE NULL::text END)                                                                                       
                     Sort Key: m_1.id, (CASE WHEN ((m_1.id2 = 15) AND ((SubPlan 1) = '202cb962ac59075b964b07152d234b70'::text)) THEN 'description'::text WHEN (m_1.id2 = 15) THEN (SubPlan 2) ELSE NULL::text END)                                                                                                     
                     ->  Nested Loop  (cost=388.90..100929.00 rows=215975 width=20)
                           Output: m_1.id, m_1.id2, s2.id, CASE WHEN ((m_1.id2 = 15) AND ((SubPlan 1) = '202cb962ac59075b964b07152d234b70'::text)) THEN 'description'::text WHEN (m_1.id2 = 15) THEN (SubPlan 2) ELSE NULL::text END                                                                                   
                           ->  Parallel Bitmap Heap Scan on public.main m_1  (cost=388.34..33793.29 rows=14265 width=12)
                                 Output: m_1.id, m_1.id2, m_1.type, m_1.name
                                 Recheck Cond: (m_1.id2 = 15)
                                 Filter: (m_1.type = 0)
                                 ->  Bitmap Index Scan on main_id2_idx  (cost=0.00..379.78 rows=34580 width=0)
                                       Index Cond: (m_1.id2 = 15)
                           ->  Index Only Scan using secondary_pkey on public.secondary s2  (cost=0.56..4.56 rows=15 width=8)
                                 Output: s2.id, s2.id2
                                 Index Cond: (s2.id = m_1.id)
                           SubPlan 1
                             ->  Index Scan using secondary_pkey on public.secondary x  (cost=0.56..8.58 rows=1 width=33)
                                   Output: x.name
                                   Index Cond: ((x.id = s2.id) AND (x.id2 = 10))
                           SubPlan 2
                             ->  Index Scan using secondary_pkey on public.secondary x_1  (cost=0.56..8.58 rows=1 width=33)
                                   Output: x_1.name
                                   Index Cond: ((x_1.id = s2.id) AND (x_1.id2 = 5))
   ->  Gather Merge  (cost=1000.45..112323.81 rows=34236 width=12)
         Output: m.id2, m.id
         Workers Planned: 2
         ->  Parallel Index Scan using main_pkey on public.main m  (cost=0.43..107372.10 rows=14265 width=12)
               Output: m.id2, m.id
               Filter: ((m.id2 = 15) AND (m.type = 0))