雪山之巅的阳光

冰雪天地的清冷,超凡脱俗的时空,一缕色彩,点缀在清蓝的背景中....那就是——雪山之巅的阳光

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  26 随笔 :: 1 文章 :: 116 评论 :: 5 Trackbacks

一、EXISTS 并非总比IN 快,究竟应该选用 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;

2、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

如果t2的记录很多而t1的记录相对较少的话,建议采用第二种写法;相反,如果t1的记录很多而t2的记录相对较少,则建议采用第一种写法。
其它情况,则需要仔细分析再决定是选择IN还是选择EXISTS

二、NOT IN 并不等价于NOT EXISTS

例如下面这两个句子,只有在t1.c1不为NULL的时候,两者返回的记录才是相同的,大家在用NOT EXISTS来替换NOT IN 时可能会忽略掉这一点
select t1.*
  from table1 t1
 where not exists
 (select t2.c1 from table2 t2 where t2.c1 = t1.c1)

select t1.*
  from table1 t1
 where t1.c1 not in (select t2.c1 from table2 t2)

posted on 2006-09-12 10:08 雪山之巅 阅读(904) 评论(0)  编辑 收藏 所属分类: 代码数据库

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-01-12 08:56 编辑过
成果网帮您增加网站收入


相关链接: