On 1/29/17 2:35 AM, Fabien COELHO wrote:
I'm wondering what pg would do on "EXISTS(SELECT 1 FROM customer)" if
there are many employees. [...]

I believe that the scan stops on the first row it finds, because the
EXITS() clause is met.

Hmmm... That is not so clear from "EXPLAIN" output:

You need to use a better test case...

explain analyze select exists(select 1 from generate_series(1,99999) gs);
                                                          QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------
 Result  (cost=0.01..0.02 rows=1 width=1) (actual time=26.278..26.278 rows=1 
loops=1)
   InitPlan 1 (returns $0)
     ->  Function Scan on generate_series gs  (cost=0.00..10.00 rows=1000 
width=0) (actual time=26.271..26.271 rows=1 loops=1)
 Planning time: 6.568 ms
 Execution time: 48.917 ms
(5 rows)

In any case, +1 for not promoting count(*) <> 0; that's a really, really bad way to test for existence.
--
Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX
Experts in Analytics, Data Architecture and PostgreSQL
Data in Trouble? Get it in Treble! http://BlueTreble.com
855-TREBLE2 (855-873-2532)


--
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