赛迪网 > IT技术 数据库 > DB2开发者园地
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

分析in和exists的区别与执行效率的问题 (1)

发布时间:2007.12.07 05:01     来源:赛迪网    作者:91391

本文主要分析了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)

1 2 3 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 工信部“三定”公布 总编制731名设24司局
· 北京发电子商务监管意见 营利性网店须办照
· 直播 08中国城市信息化高峰论坛 案例点评
· 烽火网络校园解决方案 移民安置信息管理系统
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统