Thread: inner join elimination

inner join elimination

From
Arturo Guadagnin
Date:

 

Hi

 

I was just wondering whether inner join elimination is working in postgres, so I put up a simple test case and compared it with an Oracle database (see output below).

It doesn't look like this feature is implemented in postgres, or am I missig something?

Are there any plans to implement it in the future?

 

-----------------------------------------

* Oracle 11.2

----------------------------------------

 

CREATE TABLE m (

   i INTEGER NOT NULL,

   c VARCHAR(10),

   CONSTRAINT m_pk PRIMARY KEY(i)

);

 

 

CREATE TABLE c (

   i INTEGER NOT NULL,

   created_tm DATE NOT NULL,

   CONSTRAINT c_pk PRIMARY KEY(i, created_tm),

   CONSTRAINT c_m_fk FOREIGN KEY(i) REFERENCES m

);

 

explain plan for   

select c.*

from m

  join c

    ON (m.i = c.i);   

    

select *

from table(dbms_xplan.display);   

 

--------------------------------------------------------------------------

| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |      |     1 |    22 |     2   (0)| 00:00:01 |

|   1 |  TABLE ACCESS FULL| C    |     1 |    22 |     2   (0)| 00:00:01 |

--------------------------------------------------------------------------

 

----------------------------------------

* postgres 11-beta

----------------------------------------

 

CREATE TABLE m (

   i INTEGER NOT NULL,

   c VARCHAR(10),

   CONSTRAINT m_pk PRIMARY KEY(i)

);

 

 

CREATE TABLE c (

   i INTEGER NOT NULL,

   created_tm timestamp NOT NULL,

   CONSTRAINT c_pk PRIMARY KEY(i, created_tm),

   CONSTRAINT c_m_fk FOREIGN KEY(i) REFERENCES m

);

 

 

explain 

select c.*

from m

  join c

    ON (m.i = c.i);   

    

                           QUERY PLAN                           

-----------------------------------------------------------------

Hash Join  (cost=36.10..92.24 rows=2040 width=12)

   Hash Cond: (c.i = m.i)

   ->  Seq Scan on c  (cost=0.00..30.40 rows=2040 width=12)

   ->  Hash  (cost=21.60..21.60 rows=1160 width=4)

         ->  Seq Scan on m  (cost=0.00..21.60 rows=1160 width=4)

 

Re: inner join elimination

From
pinker
Date:
As far as I know PostgreSQL does only OUTER JOIN Elimination, with inner join
it doesn't work.



--
Sent from: http://www.postgresql-archive.org/PostgreSQL-general-f1843780.html


Sv: Re: inner join elimination

From
Andreas Joseph Krogh
Date:
På torsdag 07. juni 2018 kl. 23:44:04, skrev pinker <pinker@onet.eu>:
As far as I know PostgreSQL does only OUTER JOIN Elimination, with inner join
it doesn't work.
 
See this thread:
https://www.postgresql.org/message-id/flat/VisenaEmail.2b.7dfa64bdab147c49.1600d1d9df0%40tc7-visena#VisenaEmail.2b.7dfa64bdab147c49.1600d1d9df0@tc7-visena
 
--
Andreas Joseph Krogh