| From: | Manfred Koizar <mkoi-pg(at)aon(dot)at> | 
|---|---|
| To: | "Prachi Jain" <prachijain3(at)rediffmail(dot)com> | 
| Cc: | christoph(dot)dalitz(at)hs-niederrhein(dot)de, pgsql-general(at)postgresql(dot)org, shridhar_daithankar(at)persistent(dot)co(dot)in, tgl(at)sss(dot)pgh(dot)pa(dot)us | 
| Subject: | Re: IN or EXISTS?? faster one | 
| Date: | 2002-12-19 15:56:11 | 
| Message-ID: | ibq30vcb6iso5o0u4069dt9e1lg5apjqpi@4ax.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-general | 
On 19 Dec 2002 13:09:47 -0000, "Prachi Jain"
<prachijain3(at)rediffmail(dot)com> wrote:
>I am using too many subqueries in my queries. I have read some 
>FAQs that using EXISTS is faster than IN. Is that correct?? I 
>tried to get the total runtime using EXPLAIN ANALYZE, but i got 
>total runtime for the query with IN but not for the query with 
>EXISTS.
What do you mean by "EXPLAIN ANALYZE ... not for the query with
EXISTS"?  Was there an error?
>EXPLAIN ANALYZE Select * from bom where depot_id in ( SELECT 
>depot_id from depot where company_name ='SOME' );
>
>EXPLAIN ANALYZE  Select * from bom WHERE EXISTS ( SELECT depot_id 
> from depot where company_name ='SOME' and depot.depot_id = 
>bom.depot_id );
Assuming depot_id is unique in depot, you could also write
	SELECT bom.*
	  FROM bom INNER JOIN depot d ON bom.depot_id=d.depot_id
	 WHERE d.company_name ='SOME';
or
	SELECT bom.*
	  FROM bom, depot d
	 WHERE bom.depot_id = d.depot_id
	   AND d.company_name = 'SOME';
and let the query optimizer find a good plan.
Servus
 Manfred
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Karl DeBisschop | 2002-12-19 16:04:17 | Re: Getting 2002-12-18T17:32:40-05:00 (ISO 8601) from | 
| Previous Message | Tom Lane | 2002-12-19 15:50:51 | Re: Getting 2002-12-18T17:32:40-05:00 (ISO 8601) from to_date() |