index scan over composite type

Teodor Sigaev <teodor@sigaev.ru>

From: Teodor Sigaev <teodor@sigaev.ru>
To: pgsql-hackers <pgsql-hackers@postgreSQL.org>
Date: 2018-05-15T19:44:03Z
Lists: pgsql-hackers

Attachments

Hi!

I'm not understand why postgres prefers to sort table instead of using 
index only scan when query is a simple inner join on composite type. 
Query with equality clause with constant works fine with index scan but 
join not. Could somebody point me why? Thank you.

And I'm not able to force merge_join with index scans with any 
combination of enable_* variables.

  Attached script is a self-contained test script. Pg config file is 
default.

explain
select
     a.idv, b.idv
from
     a, b
where
     a.idv = b.idv;


  Merge Join  (cost=25751.64..27751.64 rows=100000 width=74)
    Merge Cond: (a.idv = b.idv)
    ->  Sort  (cost=12875.82..13125.82 rows=100000 width=37)
          Sort Key: a.idv
          ->  Seq Scan on a  (cost=0.00..1834.00 rows=100000 width=37)
    ->  Sort  (cost=12875.82..13125.82 rows=100000 width=37)
          Sort Key: b.idv
          ->  Seq Scan on b  (cost=0.00..1834.00 rows=100000 width=37)

-- 
Teodor Sigaev                      E-mail: teodor@sigaev.ru
                                       WWW: http://www.sigaev.ru/

Commits

  1. Fix misprocessing of equivalence classes involving record_eq().