While working on a bug in postgres_fdw, I found this:

     NestLoop
         -> Seq Scan on SmallTable1 A
         NestLoop
             -> Seq Scan on SmallTable2 B
             NestLoop
                 -> Index Scan using XYIndex on LargeTable C
                       Index Condition: C.X = A.AID and C.Y = B.BID

This seems odd to me; we would not need the bottom-level Nestloop. Attached is a small patch for fixing that. I also adjusted the indentation to the last line "Index Condition: ...", to match others in the section of Parameterized Paths.

Best regards,
Etsuro Fujita
*** a/src/backend/optimizer/README
--- b/src/backend/optimizer/README
***************
*** 756,764 **** to create a plan like
          -> Seq Scan on SmallTable1 A
          NestLoop
              -> Seq Scan on SmallTable2 B
!             NestLoop
!                 -> Index Scan using XYIndex on LargeTable C
!                       Index Condition: C.X = A.AID and C.Y = B.BID
  
  so we should be willing to pass down A.AID through a join even though
  there is no join order constraint forcing the plan to look like this.
--- 756,763 ----
          -> Seq Scan on SmallTable1 A
          NestLoop
              -> Seq Scan on SmallTable2 B
!             -> Index Scan using XYIndex on LargeTable C
!                 Index Condition: C.X = A.AID and C.Y = B.BID
  
  so we should be willing to pass down A.AID through a join even though
  there is no join order constraint forcing the plan to look like this.
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to