关键字: 在oracle sql中取数据时in 和 exists 的区别?
在oracle sql中取数据时有时要用到in 和 exists 那么他们有什么区别呢?
1 性能上的比较
比如select * from t1 where x in ( select y from t2 )
执行的过程相当于:
select *
from t1, ( select distinct y from t2 ) t2
where t1.x = t2.y;
相对的
select * from t1 where exists ( select null from t2 where y = x )
执行的过程相当于:
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
表 t1 不可避免的要被完全扫描一遍
分别适用在什么情况?
以子查询 ( select y from t2 )为考虑方向
如果子查询的结果集很大需要消耗很多时间,但是t1比较小执行( select null from t2 where y = x.x )非常快,那么exists就比较适合用在这里
相对应得子查询的结果集比较小的时候就应该使用in.
阅读(949) | 评论(0) | 转发(0) |