析in和exists的区别与执行效率的问题

 
本文主要分析了in和exists的区别与执行效率的问题:
in可以分为三类:
1、形如select * from t1 where f1 in ( 'a ', 'b '),应该和以下两种比较效率。
              
               select * from t1 where f1= 'a ' or f1= 'b '
              
或者
                 
                  select * from t1 where f1 = 'a ' 
union all select * from t1 f1= 'b '
                 
你可能指的不是这一类,这里不做讨论。
2、形如
                     
                      select * from t1 where f1 in 
(select f1 from t2 where t2.fx= 'x '),
                     
其中子查询的where里的条件不受外层查询的影响,这类查询一般情况下,自动优化会转成exist语句,也就是效率和exist一样。
3、形如
                            
                             select * from t1 where f1 in 
(select f1 from t2 where t2.fx=t1.fx),
                            
其中子查询的where里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般认为效率不如exists。
除了第一类in语句都是可以转化成exists 语句的,一般编程习惯应该是用exists而不用in.
A,B两个表,
(1)当只显示一个表的数据如A,关系条件只一个如ID时,使用IN更快:
                                    
                                     select * from A where id in (select id from B)
                                    
(2)当只显示一个表的数据如A,关系条件不只一个如ID,col1时,使用IN就不方便了,可以使用EXISTS:
                                       
                                        select * from A
where exists (select 1 from B where id = A.id and col1 = A.col1
                                       
分享至
一键收藏,随时查看,分享好友!
0人
了这篇文章
类别: oracle┆阅读( 0)┆评论( 0) ┆ 返回博主首页┆ 返回博客首页
上一篇 Oracle 中in ,not in 和exists,not exists之间.. 下一篇 分析in和exists的区别与执行效率的问题 (2)

职位推荐

  • ETL开发工程师(上海)
  • 数据库管理工程师
  • 数据库管理员
  • Oracle数据开发工程师
  • 数据库开发工程师/BI工程师
  • 前台接待
  • DBA
  • 程序员
  • PHP开发工程师
  • 售前顾问(数据库方向)

文章评论

 
 

发表评论            

昵  称:
登录  快速注册
验证码:

点击图片可刷新验证码请点击后输入验证码博客过2级,无需填写验证码

内  容:

同时赞一个

每日博报 精彩不止一点关闭

你可能感兴趣的:(职场,休闲)