I wrote:
> However, it seems to be inapplicable for inequality operators. The plan
> was improved after I added the deduce-able 'U.i = 100' in theory.
Sorry, there was a miss. The correct is 'U.i < 100'.
>
> EXPLAIN SELECT * FROM T, U WHERE T.i = U.i AND T.i < 100;
> QUERY PLAN
> -----------------------------------------------------------------------------
> Merge Join (cost=0.00..340.38 rows=100 width=8)
> Merge Cond: (t.i = u.i)
> -> Index Scan using t_pkey on t (cost=0.00..10.00 rows=100 width=4)
> Index Cond: (i < 100)
> -> Index Scan using u_pkey on u (cost=0.00..3048.26 rows=100000 width=4)
>
> EXPLAIN SELECT * FROM T, U WHERE T.i = U.i AND T.i < 100 AND U.i < 100;
> QUERY PLAN
> -------------------------------------------------------------------------
> Merge Join (cost=0.00..11.32 rows=1 width=8)
> Merge Cond: (t.i = u.i)
> -> Index Scan using t_pkey on t (cost=0.00..10.00 rows=100 width=4)
> Index Cond: (i < 100)
> -> Index Scan using u_pkey on u (cost=0.00..9.94 rows=96 width=4)
> Index Cond: (i < 100)
Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center