UNION versus SUB SELECT

From: Robert DiFalco <robert(dot)difalco(at)gmail(dot)com>
To: "pgsql-performance(at)postgresql(dot)org" <pgsql-performance(at)postgresql(dot)org>
Subject: UNION versus SUB SELECT
Date: 2013-11-21 20:20:29
Message-ID: CAAXGW-w+pF+8Prk9p9SRYwZ56FboRFj6wkSvCh0xUGpFns6uhA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

I have found this:

SELECT c.*
FROM contacts c
WHERE c.id IN ( SELECT p.contact_id FROM phone p WHERE p.addr = ? )
OR c.id IN (SELECT e.contact_id FROM email e WHERE e.addr = ? );

To have a worse plan than:

SELECT * FROM contacts where id IN (
( SELECT c.id FROM contacts c
JOIN phone p ON c.id = p.contact_id AND p.addr = ?
UNION
SELECT c.id FROM contacts c
JOIN email e ON c.id = e.contact_id AND e.addr = ? );

Maybe this is no surprise. But after discovering this my question is this,
is there another option I dont' know about that is logically the same that
can perform even better than the UNION?

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message desmodemone 2013-11-21 20:31:52 Re: UNION versus SUB SELECT
Previous Message Rogerio Pereira 2013-11-20 12:36:42 Error install -pgmemcache