查询条件句使用in比较好还是exists

王朝other·作者佚名  2008-05-31
宽屏版  字体: |||超大  

在撰写SQL时,经常会烦恼要使用IN or EXISTS,在效能考量下,如何最快的做出抉择呢?

这是我的阅读经验,具体的内容请参考最后的连结,有更详尽的介绍。

假如使用IN,执行过程将如同下列所示:

Select * from T1 where x in ( select y from T2 )

LIKE:

select *

from t1, ( select distinct y from t2 ) t2

where t1.x = t2.y;

假如使用EXISTS,如同上述的查询结果,我们改写成:

select * from t1 where exists ( select null from t2 where y = x )

LIKE:

for x in ( select * from t1 )

loop

if ( exists ( select null from t2 where y = x.x )

then

OUTPUT THE RECORD

end if

end loop

所以可以想想其中差异,当子查询的表格是一个储存巨大资料量的表格时,则使用第一个方法的效能将比较差,因为他的执行计画是使用SORT MERGE JOIN,相对的假如子查询的TABLE相对比较小,使用IN的执行效率应该比较佳。

而假如外部的表格(例如t1)是相对的储存大量资料,则採用第一个方法IN的效率将会比较好,假如你使用EXISTS,则除了会对t1这个bigtable进行full scan外,还会一笔一笔读取所有t1的资料列,效能自然较差。

简单的一句话,外大内小=IN,外小内大=EXISTS,这是一个实用的概略评估方法,在大部分的情况下是适用的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有