国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

oracle中in,not in和exists,not exists之間的區(qū)別

2024-08-29 13:53:44
字體:
供稿:網(wǎng)友
       一直聽到的都是說盡量用exists不要用in,因?yàn)閑xists只判斷存在而in需要對(duì)比值,所以exists比較快,但看了看網(wǎng)上的一些東西才發(fā)現(xiàn)根本不是這么回事。
下面這段是抄的
Select * from T1 where x in ( select y from T2 )
執(zhí)行的過程相當(dāng)于:
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 )
執(zhí)行的過程相當(dāng)于:
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

從我的角度來說,in的方式比較直觀,exists則有些繞,而且in可以用于各種子查詢,而exists好像只用于關(guān)聯(lián)子查詢(其他子查詢當(dāng)然也可以用,可惜沒意義)。
由于exists是用loop的方式,所以,循環(huán)的次數(shù)對(duì)于exists影響最大,所以,外表要記錄數(shù)少,內(nèi)表就無所謂了,而in用的是hash join,所以內(nèi)表如果小,整個(gè)查詢的范圍都會(huì)很小,如果內(nèi)表很大,外表如果也很大就很慢了,這時(shí)候exists才真正的會(huì)快過in的方式。
         下面這段還是抄的

not in 和not exists
如果查詢語句使用了not in 那么內(nèi)外表都進(jìn)行全表掃描,沒有用到索引;
而not extsts 的子查詢依然能用到表上的索引。
所以無論那個(gè)表大,用not exists都比not in要快。
          也就是說,in和exists需要具體情況具體分析,not in和not exists就不用分析了,盡量用not exists就好了。



下有一個(gè)表-電視劇   
  TvPlay(title,   year,   studioname,   男主角,   女主角),   
    
  查詢出被重復(fù)拍攝1次以上的電視劇名,(如射雕,倚天屠龍)   
  select   title   
  from   TvPlay   tp   
  where   year   >   
            (select   year   
              from       TvPlay   
              where     title   =   tp.title   
            );   
    
  簡單子查詢只在()中執(zhí)行一次,而上面()中的語句是一個(gè)關(guān)聯(lián)子查詢,需要根據(jù)外層的條件多次執(zhí)行。
上一篇:Oracle SQL語句

下一篇:Oracle所有版本匯總

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌兰察布市| 固阳县| 肇东市| 顺平县| 湘潭市| 新营市| 都江堰市| 丰城市| 榆社县| 册亨县| 东辽县| 海安县| 呼图壁县| 芷江| 雅江县| 清新县| 云霄县| 苍梧县| 泗阳县| 临夏县| 新乡县| 清水河县| 新乡市| 抚州市| 滕州市| 休宁县| 兰西县| 平凉市| 乌鲁木齐县| 华池县| 会昌县| 淮南市| 荥阳市| 清新县| 佛坪县| 泽普县| 嘉义县| 安康市| 连州市| 阳高县| 台中县|