Re: IN vs EXIIST - Mailing list pgsql-general

From Jean-Christian Imbeault
Subject Re: IN vs EXIIST
Date
Msg-id 3D899AB8.4070304@mega-bucks.co.jp
Whole thread Raw
In response to IN vs EXIIST  (Jean-Christian Imbeault <jc@mega-bucks.co.jp>)
Responses Re: IN vs EXIIST  ("Nigel J. Andrews" <nandrews@investsystems.co.uk>)
Re: IN vs EXIIST  (Andrew Sullivan <andrew@libertyrms.info>)
List pgsql-general
Henshall, Stuart - WCP wrote:

[deleted]

I tried your optimized query but it was muh slower. Here are the results:

##Query using EXISTS

$ !1173
time psql TMP -c "select count(distinct invoice_id) from invoice_li
where received='true'
AND shipped='false' AND cancelled='false'
AND
   (NOT EXISTS
     (
      select * from invoice_li AS sq_inv_li where received='false'
AND cancelled='false' AND invoice_li.invoice_id=sq_inv_li.invoice_id
      )
     OR ship_now='true'
     ) "
  count
-------
    170
(1 row)


real    0m8.322s
user    0m0.010s
sys     0m0.000s

##Query using IN

$ !1175
time psql TMP -c "select count(distinct invoice_id) from invoice_li
where received='true'
AND shipped='false' AND cancelled='false'
AND
  (invoice_id not in
    (
     select distinct invoice_id from invoice_li where received='false'
AND cancelled='false'
     )
    OR ship_now='true'
    ) "
  count
-------
    170
(1 row)


real    0m0.234s
user    0m0.000s
sys     0m0.010s

Maybe EXISTS is not always faster than IN ?

After a "vacuum analyze" the numbers become:

#using EXISTS

real    0m3.229s
user    0m0.000s
sys     0m0.000s

#using IN

real    0m0.141s
user    0m0.000s
sys     0m0.000s


Jc


pgsql-general by date:

Previous
From: Jean-Christian Imbeault
Date:
Subject: Deadlock error!?
Next
From: Jean-Christian Imbeault
Date:
Subject: Re: datetime(): Where is it in the docs?