basically the same criteria as IN vs EXISTS from 
http://decipherinfosys.wordpress.com/2007/01/30/in-vs-exists/

select <select column list> from TABLE_A where col1 in (Select col2 from 
TABLE_B)
                                        VS
Select <select column list> from TABLE_A where exists (select 1 from Table_B 
where Table_B.col2 = Table_A.col1)

where should one use an IN vs the EXISTS clause? 

EXISTS works better when:
If the result of
the sub-query 
“Select col2 from TABLE_B” is huge (rows in table_b > rows in table_a)
AND 
main table TABLE_A is a
relatively small set (table_a rows < table_b rows) AND
 executing “select 1 from Table_B where
Table_B.col2 = Table_A.col1″ is very fast because of proper index on
Table_B.col2, 
then an exists clause will be better since the optimizer
can do a FTS on main table Table_A and then use the index to do the probe/seek
operations for Table_B.
(essentially a giant Nested Loop)

IN works better when:
If the result of the sub-query (table_b) is small, then the IN clause is much
faster. (the results from the subquery is so small it can be inlined into the 
main query) 

http://decipherinfosys.wordpress.com/2007/01/30/in-vs-exists/
HTH
Martin 
______________________________________________ 
Disclaimer and confidentiality note 
This message is confidential and may be privileged. If you are not the intended 
recipient, we kindly ask you to  please inform the sender. Any unauthorised 
dissemination or copying hereof is prohibited. This message serves for 
information purposes only and shall not have any legally binding effect. Given 
that e-mails can easily be subject to manipulation, we can not accept any 
liability for the content provided.






> Date: Sun, 29 Mar 2009 09:13:10 +0000
> Subject: Re: IN vs. OR on performance
> From: poo...@pookey.co.uk
> To: ro4...@gmail.com
> CC: mysql@lists.mysql.com
> 
> 2009/3/29 Oscar <ro4...@gmail.com>:
> > Hi all-
> >
> > I want to know what the difference between IN and OR is under the hood.
> >
> > select * from dummy_table where id in (2, 3, 4, 5, 6, 7);
> >
> > select * from dummy_table where id=2 or id=3 or id=4 or id=5 or id=6 or
> > id=7;
> 
> I've have thought once the query is compiled, they are the same. What
> might cause a difference in performance is doing  id > 2 and id <= 7.
> 
> Test it on a large dataset and let us know :)
> 
> -- 
> Blog: http://pookey.co.uk/blog
> Follow me on twitter: http://twitter.com/ipchristian
> 
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql?unsub=mgai...@hotmail.com
> 

_________________________________________________________________
Hotmail® is up to 70% faster. Now good news travels really fast.
http://windowslive.com/online/hotmail?ocid=TXT_TAGLM_WL_HM_70faster_032009

Reply via email to