国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 佛学| 泰州市| 西充县| 弥渡县| 方山县| 宜阳县| 子长县| 武隆县| 上犹县| 台北市| 珠海市| 西宁市| 务川| 肥乡县| 南投县| 南江县| 连江县| 丽水市| 上杭县| 汽车| 太湖县| 新龙县| 榕江县| 兴海县| 香港 | 子洲县| 科技| 镇康县| 土默特左旗| 泰来县| 南康市| 大港区| 油尖旺区| 新宁县| 阜宁县| 清流县| 长葛市| 元氏县| 长阳| 玉树县| 麻栗坡县|